Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

8. diel - Android programovanie - Životný cyklus aktivity

V dnešnom Android Kotline tutoriále si vysvetlíme, čo je to aktivita a popíšeme si jej životný cyklus.

Čo je aktivita

Aktivitu si môžeme predstaviť ako jednu obrazovku v aplikácii.

Zapneme aplikáciu a zobrazí sa úvodná animácia. To je prvá aktivita. Potom sa zobrazí menu aplikácie s možnosťami "Kalkulačka", "Poznámky" a "Editor", to bude druhá aktivita. Po kliknutí na jednotlivé ponuky v menu nás aplikácia presmeruje do tretej, štvrtej alebo piatej aktivity podľa možnosti, ktorú sme si vybrali.

Z našej aplikácie môžeme pristupovať aj k aktivitám iných aplikácií alebo k aktivitám systému. Je možné napríklad spustiť aktivitu pre výber fotografie z galérie alebo výber priečinka alebo súboru.

Životný cyklus aktivity

Android, ako OS určený primárne pre smartfóny, sám zodpovedá za aktivity a všetko, čo s nimi súvisí. Je jasné, že majiteľ telefónu radšej odpovie na nečakaný prichádzajúci hovor alebo SMS, než aby aplikáciu sám musel minimalizovať. Podobných situácií môže nastať viac, okrem prichádzajúceho hovoru môže napr. užívateľ aktivitu pozastaviť sám, keď sa vráti do hlavnej ponuky.

Z toho vyplýva, že nie je vždy jasné, či sa naša aktivita nepozastaví alebo neukončí. Preto existujú rôzne metódy, ktoré systém na aktivite volá v rôznych situáciách a tým nám na ne umožňuje reagovať. Pozrime sa na nasledujúcu schému životného cyklu aktivity Android aplikácií:

Tvorba mobilných aplikácií pre Android v Kotlin

Najskôr si popíšeme jednotlivé stavy aktivít, potom sa zameriame na popis obslužných metód.

Stav aktivity

Všetko má na starosti trieda Activity. Tá poskytuje množstvo udalostí, ktoré umožňujú aktivite reagovať na to, že sa jej stav zmenil. Teda, že systém sám vytvára, zastavuje alebo obnovuje aktivitu alebo ukončuje proces, v ktorom je aktivita umiestnená. Pomocou obslužných metód udalostí životného cyklu aktivity môžeme určiť, ako sa naša aktivita zachová, keď napr. užívateľ aktivitu opustí a potom ju znova zobrazí v popredí.

Pokiaľ napríklad vytvárame streamovaný videoprehrávač, môžeme pri prerušení aktivity video pozastaviť a ukončiť pripojenie aplikácie k internetu. Až sa používateľ vráti, môžeme sa znovu pripojiť k sieti a umožniť mu obnoviť video z miesta, v ktorom predtým skončil. Inými slovami, každá obslužná metóda nám pomáha vykonávať konkrétnu prácu, ktorá je vhodná pre danú zmenu stavu.

Vďaka správnemu spracovaniu prechodov medzi jednotlivými stavmi aktivity bude naša aplikácia výkonnejšia a stabilnejšia.

Každá aktivita sa nachádza súčasne len v jednom z nasledujúcich stavov:

  • Beží - Aktivita sa úspešne spustila a beží na popredí, je teda pre užívateľov viditeľná.
  • Pozastavená - Aktivita je vidieť, je ale prekrytá inou aktivitou - upozornením na prichádzajúcu SMS, hovor alebo napríklad dialógom o plnom nabití batérie.
  • Ukončená - Aktivita nie je vidieť, používateľ k nej nemá prístup, ale jej objekt ešte nebol úplne zničený. Užívateľ sa k nej bude môcť vrátiť, pokiaľ nebude zničená, napríklad kvôli nedostatku pamäte.
  • Zničená - Aktivita je úplne mŕtva.
Korektnou implementáciou metód udalostí sa môžeme vyhnúť nasledujúcim problémom:
  • Pádu aplikácie, ak používateľ počas jej používania prijme telefónny hovor alebo prepne na inú aplikáciu.
  • Zbytočné spotrebe cenných systémových prostriedkov, keď ich užívateľ aktívne nepoužíva.
  • Strate rozrobené práce užívateľa, ak aplikáciu opustí a vráti sa k nej neskôr alebo pokiaľ treba len zariadenie otočí.
Poďme si teraz jednotlivé metódy predstaviť.

Udalosti životného cyklu

Pre ošetrenie prechodov medzi fázami životného cyklu aktivity, poskytuje trieda Activity základnú sadu siedmich obslužných metód:

  • onCreate() - Táto metóda je jediná, ktorú musíme vždy prepísať. Pri spustení aktivity sa Android postará o základné veci, ako vytvorenie objektu a spustenie procesu a potom zavolá metódu onCreate(). V nej nadefinujeme všetko potrebné, aby sa aktivita mohla rozbehnúť. Určíme napríklad, aké grafické rozhranie sa nám má zobraziť, či má byť zobrazený app bar, inicializujeme atribúty triedy a pod.
  • onStart() - Následne sa volá metóda onStart(), pokiaľ aktivita bola prvýkrát spustená alebo bola aktivovaná po svojom skrytí (napr. po zhasnutí displeja zariadenia, prečítaní prichádzajúcej SMS, otočení zariadenia a pod.). Táto metóda nemôže dostať užívateľský vstup.
  • onResume() - Ďalšia metóda sa volá tesne predtým, než je aktivita posunutá do popredia (reštart, prvé spustenie alebo odpauzovanie), môže dostať užívateľský vstup.
  • onPause() - Pred prechodom aktivity do pozadia sa volá metóda onPause(). Systém dostáva informáciu o tom, že aktivita už nie je v popredí a získava právomoc násilného ukončenia aktivity (v prípade nedostatku pamäti). Metóda je tiež volaná, pokiaľ je aktivita viditeľná len čiastočne. Táto metóda je vhodným miestom na uvoľnenie rôznych systémových prostriedkov, ktoré užívateľ v pozastavenej aktivite nepotrebuje.
  • onStop() - Keď sa má pozastavená aktivita ukončiť, zavolá sa metóda onStop(), aktivita potom nie je viditeľná pre užívateľov.
  • onRestart() - Ako vyplýva z predchádzajúceho diagramu, pokiaľ bola aktivita ukončená, ale nebola zničená, môžeme ju obnoviť pomocou metódy onRestart(), ktorá sa zavolá pred metódou onStart().
  • onDestroy() - Posledná metóda sa volá pred zrušením aktivity. Dôvodom môže byť, že užívateľ túto aktivitu ukončil alebo systém dočasne ničí aktivitu kvôli zmene konfigurácie (rotáciu zariadenia alebo režimu viacerých okien). V metóde onDestroy() by mali byť uvoľnené všetky prostriedky, ktoré doteraz uvoľnené neboli.
Aktivity v projekte kalkulačky

Metódu onCreate() už máme vygenerovanú v kóde triedy projektu SimpleCalc. Je to jediná metóda životného cyklu aktivity, ktorej prepísanie je povinné. Android Štúdiom vygenerovaný kód vyzerá nasledovne:

override fun onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}

Aktivita v metóde onCreate() nastaví layout, v prípade nášho projektu SimpleCalc, riadkom:

setContentView(R.layout.activity_main)

Odkazuje teda na layout activity_main.xml, ktorý je v priečinku res/layout/.

Pri programovaní nie je vždy nutné brať ohľad na všetky spomínané metódy. Niekedy ich skrátka nie je potrebné použiť. Jedinou podmienkou je použitie metódy onCreate().

Vo vytvorenom projekte SimpleCalc si teraz prepíšeme aj zvyšných šesť metód životného cyklu aktivity a vložíme do nich výpis správ pre nástroj Logcat. S týmto nástrojom sme sa zoznámili v časti o ladení aplikácií. Tu nám umožní pozorovať, kedy sa aká metóda spustí.

Doplnenie udalostí do SimpleCalc

Na prepisovanie metód môžeme jednoducho využiť automatické dopĺňanie kódu. Keď budeme chcieť prepísať metódu onPause(), začneme písať jej názov a Android Studio nám ponúkne zvyšok deklarácie metódy samo:

Tvorba mobilných aplikácií pre Android v Kotlin

Do súboru MainActivity.kt teda pridáme tieto časti kódu:

class MainActivity : AppCompatActivity {

    // ...

    companion object {

        // ...

        var TAG_LIFECYCLE = "lifecycle"
    }

    override fun onCreate(savedInstanceState: Bundle?) {

        // ...

        Log.d(TAG_LIFECYCLE, "onCreate()")


        // ...
    }

    override fun onStart() {
        super.onStart()
        Log.d(TAG_LIFECYCLE, "onStart()")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG_LIFECYCLE, "onResume()")
    }

    override fun onPause() {
        super.onPause()
        Log.d(TAG_LIFECYCLE, "onPause()")
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG_LIFECYCLE, "onStop()")
    }

    override fun onRestart() {
        super.onRestart()
        Log.d(TAG_LIFECYCLE, "onRestart()")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG_LIFECYCLE, "onDestroy()")
    }
}

Prepísali sme všetky chýbajúce metódy životného cyklu aktivity a do nich pridali správy pre Logcat, kde vypisujeme, ktorá metóda sa zavolala. Logcat otvoríme z menu takto: View -> Tool Windows -> Logcat:

Tvorba mobilných aplikácií pre Android v Kotlin

V otvorenom okne, do poľa pre filtrovanie správ, vložíme obsah tag:[obsah konstanty TAG_LIFECYCLE]:

Tvorba mobilných aplikácií pre Android v Kotlin

Následne spustíme aplikáciu SimpleCalc na nejakom zariadení (skutočnom alebo virtuálnom). Zariadenie skúsime otáčať, aplikáciu odstrániť z displeja tlačidlom pre zobrazenie plochy telefónu, a potom ju znovu otvoriť. Alebo v zozname otvorených aplikácií túto aplikáciu vyhodíme úplne preč (ukončíme aplikáciu). V okne Logcatu môžeme sledovať, ktoré metódy životného cyklu boli volané.

Výstup v Logcate potom vyzerá napríklad takto:

Tvorba mobilných aplikácií pre Android v Kotlin

Všetko si sami vyskúšajte vo svojom projekte.

V nasledujúcej lekcii, Android programovanie - ConstraintLayout - Vytvorenie obmedzení , si predstavíme ConstraintLayout a ukážeme si, ako vytvárať a odstraňovať obmedzenia rôznymi spôsobmi.


 

Predchádzajúci článok
Aplikácie zápisník v Kotlin - Formulár a ConstraintLayout
Všetky články v sekcii
Tvorba mobilných aplikácií pre Android v Kotlin
Preskočiť článok
(neodporúčame)
Android programovanie - ConstraintLayout - Vytvorenie obmedzení
Článok pre vás napísal Marek Urbańczyk
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje programování v Kotlinu, Javě. Má také zkušenosti s C#.
Aktivity