Pod pokličkou OnTheRoad

No Image-01
device Úvodní nástěnka aplikace

Pozorným sledovačům českého android dění není jistě třeba představovat poslední a zatím největší androidí produkt z Inmite dílny – tlustého klienta pro českou službu OnTheRoad (k dispozici zdarma v Android Marketu). Pro všechny ostatní rychle shrnu, o co se jedná. OnTheRoad je služba určená všem cestovatelům. Umožní vám publikovat cestovatelské zážitky během několika kliknutí či sekund. Android klient přináší možnost publikovat přímo z průběhu dění.

S OnTheRoad na Androidu můžete přímo na telefonu spravovat svůj účet, psát články, číst a odpovídat komentáře a to vše i offline, bez připojení k internetu. Jakmile se k internetu připojíte, všechny změny se automaticky synchronizují se serverem.

V tomto příspěvku bych vám chtěl umožnit nahlédnout trochu pod pokličku komplexní androidí aplikace a dát několik tipů pro tvorbu aplikací vlastních.

Uživatelské rozhraní

Pokud chcete uživateli ukázat několik typů informace tak, aby jimi mohl rychle procházet a listovat, jako nejvýhodnější se jeví použít záložky (TabActivity). Musíte ale pamatovat na to, že si budete muset ručně oprogramovat různá menu na různých záložkách a že z aktivity na záložce nespustíte další aktivitu voláním startActivityForResult(…). Pokud na to budete pamatovat již pří návrhu, ušetříte si tím spoustu nepříjemností.

Integrace se systémem

Integrace se systémem jsou drobnosti, ale dodají vaší aplikaci hodně profesionality. Jak jste si již možná všimli, aplikace se pomocí intentů integruje do systému a vy tak snadno můžete sdílet fotky a videa. K tomu, aby to bylo možné, je třeba jednotlivé aktivity navrhnout tak, aby byly co nejvíce samostatné a nepotřebovaly nic zbytečně z aktivit, které ještě nemusí být nastartované. Ideálně, pokud každá aktivita může žít samostatně.

Synchronizace se serverem

Veškerá komunikace se servery OnTheRoad probíhá pomocí xml-rpc. Pro tvorbu xml-rpc klienta mohu vřele doporučit open-source knihovnu android-xmlrpc, se kterou jsme neměli vůbec žádný problém. Jen si její volání budete muset obalit asynchronním wrapperem, protože samotná knihovna podporuje pouze synchronní volání, které si v android aktivitách nemůžete dovolit. My jsme zvolili obalení pomocí thread-poolu, takže v jeden okamžik je možno obsluhovat více klientských dotazů.

Progressbar při synchronizaci Progressbar při synchronizaci

Synchronizace z klienta na server probíhá kompletně na pozadí a uživatel tak není ve své práci zdržován. Dlouhotrvající úlohy na pozadí se snadno implementují jako služby (Service), které s uživatelem komunikují pomocí notifikací (v našem případě notifikací s progressbarem pomocí RemoteView). Služba přijímá synchronizační požadavky od různých aktivit a posílá je worker-threadu, který provádí samotnou komunikaci se serverem. Je třeba myslet na to, že služba, podobně jako aktivita, může být kdykoliv systémem odstřelena, je proto výhodné ukládat si někam mezistavy komunikace, aby se vždy nemuselo začínat úplně od začátku. Nám se osvědčilo (kvůli rychlosti, jednoduchosti a spolehlivosti) ukládat metadata o synchronizaci jako Serializable objekty přímo přes ObjectStream do paměti telefonu.

Synchronizaci ze serveru na klienta provádíme jako blokující operaci. Uživatel v té chvíli nemůže s aplikací nic dělat a musí počkat, než synchronizace skončí. V takovém případě, kdy synchronizace probíhá pomocí aktivity, je třeba mít mechanizmus pro zastavení dlouhotrvající operace na pozadí při náhlém ukončení aktivity. Aby se nestalo, že synchronizace probíhá, aktivita skončí a znovu se spustí a spustí se druhá synchronizace, která bude s první kolidovat.

Dlouho nabíhající GPS

Vkládání nového článku, které na pozadí zjišťuje aktuální pozici. Vkládání nového článku, které na pozadí zjišťuje aktuální pozici.

Taky se vám nelíbí, kolik času potřebuje k inicializaci GPSka, než vám dá správnou pozici? Klasické řešení, kdy se LocationListener registruje na onResume a deregistruje na onPause aktivity, trpí tím, že v aktivitě samotné nestrávíte tolik času, aby se získala GPS pozice. Můžete si všimnout, když píšete v OnTheRoad nový článek, že gpska hledá vaši pozici, i když zrovna pracujete v jiné aktivitě (například vybíráte další obrázek nebo video), a má tak dost času pozici nepřerušovaně najít, než článek celý napíšete. Řešení spočívá v tom, že necháte listenery registrované ještě chvíli po zavolání onPause. Nesmíte při tom ale zapomenout, že onPause může být taky poslední callback zavolaný systémem a že po něm může aktivita zrovna skončit.

Foťák kamenem úrazu

Pokud pouzijete k foceni standardní foťákovou aktivitu, dostanete fotky velikosti pouze zhruba 500×300 pixelů, dokonce i když aktivitě podstrčíte url, kam má fotku uložit. Takové rozlišení je i pro webovou prezentaci příliš málo.  Chyba byla již v Android 1.1. a existuje i v Android 1.5. Nezbývá tedy nic jiného, než si napsat aktivitu pro focení vlastní, což není nic jednoduchého, pokud chcete správně pracovat například se zaostřováním a změnami orientace. Tady by měli kluci z Googlu trochu máknout.

Závěrem

Děkujeme všem, kteří aplikaci již vyzkoušeli a napsali nám feedback. Pokud budete aplikaci zkoušet a budete nám chtít dát vědět, co se vám líbilo a nelíbilo, můžete tady v komentářích pod článkem, nebo na android fóru.

archiv
O Autorovi - archiv

více o autorovi

Mohlo by vás zajímat

Komentáře (0)