Image
1.7.2016 0 Comments

Programujeme pre Android - Abstraktné triedy /15.časť

Táto časť seriálu bude teoretickou prezentáciou najnovších úprav, ktoré sme vykonali vo vzorovej aplikácii db_sync. Dôvodom doplnenia príslušných častí (tried a metód) programového kódu bola implementácia systému pripomienok (reminder). Naším cieľom je ku každej položke zoznamu úloh pripojiť údaj o dátume a čase, keď nám má aplikácia danú úlohu pripomenúť. Túto vlastnosť (feature) aplikácie db_sync neskôr plánujeme použiť aj v rámci aplikácie plánovač.

Abstraktné triedy

Pri dopĺňaní kódu aplikácie db_sync o novú funkcionalitu súvisiacu s implementáciou pripomienok sme použili tzv. abstraktnú triedu (abstract class). Dôvod jej použitia najlepšie vysvetlíme prostredníctvom opisu významu abstraktných tried.

Abstraktné triedy deklarujeme pomocou kľúčového slova abstract. Môžu mať potomkov, ale v princípe nemôžeme vytvoriť ich inštanciu (objekt). Je to preto, lebo abstraktné triedy nie sú „koncovými“ triedami, ale iba šablónami na tvorbu potomkov (sub-classes), aj keď samy osebe môžu obsahovať definíciu svojich vlastností a metód (členov). Trieda odvodená od abstraktnej triedy musí buď implementovať (definovať) všetky metódy abstraktnej triedy, alebo musí byť takisto deklarovaná ako abstraktná. Získavame tak pomerne silný kontrolný mechanizmus na tvorbu odvodených tried (potomkov). Inými slovami, abstraktnou triedou dokážeme striktne menovať metódy, ktoré musí implementovať odvodená trieda. Takisto možno povedať, že abstraktná trieda stanovuje schopnosti, ktoré musia mať triedy odvodené od nej. Každá z nich musí stanovenú schopnosť mať, aj keď ju môže implementovať vlastným spôsobom.

Rozdiel medzi abstraktnými triedami a veľmi podobnými rozhraniami (interfaces) je v tom, že v prípade rozhraní je každý člen automaticky deklarovaný ako public, static a final a všetky deklarované, resp. definované (default, static methods) metódy sú automaticky public.

Použitie abstraktných tried

Abstraktné triedy možno použiť takmer vždy avšade, a to najmä vprípadoch, ak chceme týmto spôsobom kontrolovať tvorbu potomkov (tried alebo metód), resp. zdieľať (share) metódy. Je iba na ľubovôli programátora, aký systém práce si zvolí. Všeobecné odporúčania sú však nasledujúce:

1. Uvažujeme o zdieľaní rovnakého kódu viacerými veľmi úzko kooperujúcimi triedami, tieto triedy majú mnoho spoločných čŕt (similarities) a ich metódy vykonávajú rovnaké úlohy, ale v kontexte s inými údajmi.

2. Plánujeme vytvoriť niekoľko tried, ktoré budú mať podobnú funkcionalitu, teda budú to podobné triedy, resp. budú mať podobných členov.

3. Nie je pre nás vhodné ani možné využiť rozhrania, to značí, že nechceme, aby naši členovia boli deklarovaní ako static, final, alebo public.

Abstraktná trieda aplikácie db_sync

V rámci našej vzorovej aplikácie sme deklarovali abstraktnú triedu AlarmAbstract (reminder/AlarmAbstract.java), na základe ktorej sme následne vytvorili potomkov Alarm a AlarmAt. Ich význam nie je v tomto momente podstatný, dôležité je, že v oboch odvodených triedach, keďže sme ich nedeklarovali ako abstraktné, sme museli implementovať (definovať) stanovené metódy abstraktnej triedy AlarmAbstract. Keby sme aj v budúcnosti chceli vytvoriť ďalšie triedy odvodené od triedy AlarmAbstract, ich metódy by sme museli implementovať, čím kontrolujeme ich tvorbu.

Obr. 1 Grafické komponenty DatePicker a TimePicker použité v aplikácii db_sync_v4

Pridanie upozornenia

Algoritmus pridania upozornenia sme realizovali takto:

1. K položke zoznamu úloh (ListView) sme doplnili tlačidlo s obrázkom (ImageButton), pomocou ktorého spúšťame novú aktivitu AlarmActivity.

2. Okno AlarmActivity (layout activity_alarm.xml) obsahuje dvojicu grafických komponentov (widgets), určenú na výber dátumu (DatePicker) a času (TimePicker), ktorých funkcionalitu poznáme z predchádzajúcich častí seriálu.

3. Stlačením ďalšieho tlačidla s obrázkom po predošlom výbere dátumu a času dôjde k vytvoreniu nového upozornenia (Alarm) a naštartovaniu služby AlarmService. Pod pojmom vytvorenie nového upozornenia rozumieme najmä naplnenie príslušných tabuliek stanovenými údajmi (ID, názov, dátum, čas...). Konkrétnu implementáciu podrobne rozoberieme v budúcej časti seriálu, ku ktorej takisto priložíme aj najnovší zdrojový kód.

4. Služba AlarmService pracuje s objektmi triedy AlarmManager, ktoré v našom prípade používame na systémové zverejnenie (broadcast) zámyslov (intents). V okamihu broadcastu zámyslu dôjde k automatickému štartu nami požadovanej aplikácie vprípade, ak tá nie je práve spustená. Registrované objekty alarm sú pritom aktívne aj v prípade, že je naše zariadenie v režime spánku (sleep).

5. Posledným krokom v reťazci je „prijímač systémových oznámení“ AlarmReceiver. Ide o nami registrovaný BroadcastReceiver, ktorého úlohou je v stanovený deň a v stanovenom čase informovať (upozorniť) používateľa o danej udalosti. V našom prípade sa tak udeje pomocou notifikácie (NotificationManager + Notification). Spôsoby, ako upozorniť používateľa, môžu byť ľubovoľné. Najčastejšie používané sú grafické, zvukové (SOUND) a vibračné (VIBRATE) oznamy.

obr2.bmp

Obr. 2 Blokový diagram volania aktivity AlarmActivity, služby AlarmService a prijímača AlarmReceiver

Intent posielaný po štarte systému

Posledná zaujímavosť, ktorú predstavíme v tejto časti seriálu, je broadcasting zámyslov po štarte, resp. po reštarte zariadenia. Naším cieľom je, aby bola služba AlarmService zabezpečujúca prípravu alarmov naštartovaná aj v prípade, že používateľ vypne/zapne, resp. reštartuje svoje zariadenie.

Túto úlohu plní v našom prípade ďalší registrovaný BroadcastReceiver AlarmBoot (reminder/AlarmBoot.java), ktorý reaguje na broadcastový intent BOOT_COMPLETED zasielaný systémom po ukončení bootovania:

<action android:name="android.intent.action.BOOT_COMPLETED" />

Príjem uvedeného systémového zámyslu naším receiverom je v manifeste povolený prostredníctvom zápisu:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

ITPro

Red Hat a Veracomp: Open source a cloudy

09.12.2016 12:05

Cieľom ďalšej z radu spoločných akcií firiem Red Hat a Veracomp Slovakia v Bratislave bola prezentácia produktov, služieb a stratégií týkajúcich sa najhorúcejších tém IT podpory biznisu s využitím naj ...

ITPro

Právne okienko

08.12.2016 12:02

1. Ako postupovať, ak obchodník nechce uznať reklamáciu tovaru objednaného z e-shopu? V takomto prípade môžu nastať v zásade dve situácie. Ak zákazník reklamuje tovar do 12 mesiacov od jeho kúpy, mož ...

ITPro

Red Hat Forum 2016: Otvorená digitálna transformácia

09.12.2016 11:51

Podujatím v Prahe pre región CENE (stredná a severná Európa) rezonovala komunitná atmosféra a snaha o spoluprácu podľa pravidla „každý s každým“. IT musí priniesť do digitálneho biznisu novú kultúru a ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá