Zavrieť reklamu

Stále ešte veľa ľudí nevie, ako funguje multitasking v iOS. Pre začiatok je však nutné upozorniť, že nejde o skutočný multitasking ale o veľmi múdre riešenie ktoré nezaťažuje systém ani užívateľa.

Často možno počuť povery, že aplikácie bežiace v iOS na pozadí zapĺňajú operačnú pamäť, čo vedie k spomaleniu systému a zníženiu výdrže batérie, preto by ich mal používateľ vypínať manuálne. Lišta pre multitasking v skutočnosti neobsahuje zoznam všetkých bežiacich procesov na pozadí ale iba naposledy spustené aplikácie. Užívateľ sa teda nemusí starať o procesy bežiace na pozadí s výnimkou niekoľkých málo prípadov. Keď stlačíte Home button, tak sa aplikácia väčšinou uspí, alebo sa ukončí, takže naďalej nezaťažuje procesor ani batériu av prípade potreby uvoľní potrebnú pamäť.

Nejedná sa teda o plnohodnotný multitasking kedy vám bežia desiatky procesov. V popredí beží vždy len jedna aplikácia, ktorá sa v prípade potreby pozastaví alebo úplne vypne. Na pozadí potom beží len niekoľko podružných procesov. Preto sa u iOS stretnete s pádom aplikácie len málokedy, napríklad Android je zahltený bežiacimi aplikáciami o ktoré sa používateľ musí starať. To jednak znepríjemňuje prácu so zariadením a na druhú stranu spôsobuje napríklad pomalé spúšťanie a prechody medzi aplikáciami.

Typ behu aplikácie

Aplikácia na vašom iOS zariadení sa nachádza v jednom z týchto 5 stavov :

  • Beží: aplikácia je spustená a beží na popredí
  • Na pozadí: je stále spustená ale beží na pozadí ( môžeme používať ďalšie aplikácie )
  • Pozastavená: Stále využíva operačnú pamäť ale nie je spustená
  • Neaktívne: aplikácia je spustená ale nepriama príkazy (napríklad keď uzamknete zariadenie so spustenou aplikáciou)
  • Nebeží: Aplikácia bola ukončená alebo nebola spustená

Zmätky nastanú, akonáhle aplikácia prejde na pozadí, aby nerušila. Keď stlačíte Home button alebo použijete gesto pre ukončenie aplikácie (iPad) tak aplikácia prejde na pozadí. Väčšina aplikácií je pozastavená počas niekoľkých sekúnd (Ukladajú sa do operačnej pamäte iZariadenia, aby mohli byť rýchlo spustené, toľko nezaťažujú procesor a tým šetria výdrž batérie) Mohli by ste si myslieť, že ak aplikácia naďalej využíva pamäť, budete ju musieť odstrániť ručne pre jej uvoľnenie . Ale to vy robiť nemusíte, pretože to za vás iOS urobí sám. Ak máte na pozadí pozastavenú náročnú aplikáciu, akou je napríklad hra, ktorá využíva veľkú časť operačnej pamäte, iOS ju v prípade potreby automaticky odstráni z pamäte a vy ju znovu spustíte kliknutím na ikonu aplikácie.

Žiadny z týchto stavov sa neprejaví v lište multitaskingu, panel zobrazuje iba zoznam naposledy spustených aplikácií bez ohľadu na to, či je aplikácia zastavená, pozastavená alebo beží na pozadí. Môžete si tiež všimnúť že aplikácia ktorá je práve spustená sa v Multitasking paneli neobjaví

Úlohy na pozadí

Normálne, keď stlačíte Home button, tak aplikácia pobeží na pozadí a pokiaľ ju práve nepoužívate, tak sa do piatich sekúnd automaticky pozastaví. Takže ak sťahujete napríklad podcast, tak to systém vyhodnotí ako spustenú aplikáciu a odloží ukončenie o desať minút. Najneskôr po desiatich minútach sa proces uvoľní z pamäte. Skrátka sa nemusíte obávať že stlačením Home Button prerušíte svoje sťahovanie, pokiaľ nie je treba viac ako 10 minút na jeho dokončenie.

Neurčitý beh na pozadí

Pri nečinnosti systém aplikáciu ukončí do piatich sekúnd av prípade sťahovania sa ukončenie odloží o desať minút. Existuje však malé množstvo aplikácií ktoré vyžadujú beh na pozadí. Tu je pár príkladov aplikácií ktoré môžu v iOS 5 bežať na pozadí neobmedzene dlhú dobu:

  • Aplikácie ktoré prehrávajú zvuk a musia sa na chvíľu prerušiť (pozastavenie hudby pri telefonáte a pod.),
  • Aplikácie ktoré sledujú vašu polohu (navigačný softvér),
  • Aplikácia prijímajúca VoIP hovory, napríklad ak používate Skype tak môžete prijať hovor aj keď je aplikácia na pozadí,
  • Automatické sťahovanie ( napríklad Newsstand ).

Všetky aplikácie by mali byť ukončené, pokiaľ už nevykonávajú danú úlohu (napríklad sťahovanie na pozadí). Existujú však výnimky, ktoré bežia na pozadí nepretržite, napríklad natívne aplikácie Mail. Pokiaľ sú spustené na pozadí, tak zahlcujú pamäť, využitie procesora alebo znižujú výdrž batérie

Aplikácie, ktoré majú povolené bežať na pozadí neobmedzene dlhú dobu, môžu robiť čokoľvek ako keď sú spustené, a to od prehrávania hudby až po sťahovanie nových epizód Podcastov.

Ako som už uviedol, používateľ nikdy nemusí ukončovať aplikácie bežiace na pozadí. Jedinou z týchto výnimiek je, keď aplikácia bežiaca na pozadí spadne alebo sa zo spánku neprebudí správne. To potom môže používateľ ukončiť aplikácie ručne v lište multitaskingu, ale to sa stáva zriedkakedy.

Všeobecne teda platí, že nemusíte riadiť procesy na pozadí, pretože sa o ne systém postará sám. Preto je iOS tak svieži a rýchly systém.

Z pohľadu vývojárov

Aplikácia môže v rámci multitaskingu reagovať celkom šiestimi rôznymi stavmi:

1. applicationWillResignActive

Tento stav v preklade znamená, že aplikácia bude v budúcnosti (otázka niekoľkých málo milisekúnd) rezignovať na post aktívne aplikácie (teda aplikácie v popredí). Toto sa deje napríklad pri príjme hovoru v dobe používania aplikácie, ale zároveň sa táto metóda teda tento stav vyvolá aj pred prechodom aplikácie do pozadia, teda je potrebné s týmito zmenami počítať. Táto metóda je vhodná aj na to, aby napríklad práve pri prichádzajúcom hovore pozastavila všetku činnosť, ktorú vykonáva a počkala až na ukončenie hovoru.

2. applicationDidEnterBackground

Stav indikuje, že aplikácia prešla do pozadia. Vývojári by túto metódu mali využiť na pozastavenie všetkých procesov, ktoré nutne nemusia bežať na pozadí a mali by vyčistiť pamäť od nevyužívaných dát a ďalších procesov, napríklad by mali ukončiť platnosť časovačov, vymazať z pamäte načítané obrázky, ktoré nebudú nutne potrebné, alebo ukončiť spojenie so servermi, ak to pre beh aplikácie nie je kritické, aby spojenie dokončovala aj na pozadí. Keď je v aplikácii metóda vyvolaná, v podstate by mala slúžiť na úplné pozastavenie aplikácie, pokiaľ niektorá jej časť nie je požadovaná aby bežala na pozadí.

3. applicationWillEnterForeground

Tento stav je opakom stavu prvého, kedy aplikácia bude rezignovať na aktívny stav. Stav jednoducho znamená, že uspaná aplikácia počas niekoľkých nasledujúcich milisekúnd bude obnovená z pozadia a zobrazí sa v popredí. túto metódu by vývojári mali využiť na obnovenie všetkých procesov, ktoré boli neaktívne v čase, keď aplikácia bola na pozadí. Malo by dôjsť k obnoveniu spojenia so servermi, znovunastaveniu časovačov, načítaniu obrázkov a dát do pamäte a ďalšie potrebné procesy sa môžu obnoviť tesne pred tým, než používateľ znovu uvidí načítanú aplikáciu.

4. applicationDidBecomeActive

Stav indikuje to, že aplikácia sa po obnovení do popredia stala práve aktívnou. Toto je metóda, ktorá sa dá využiť na dodatočné úpravy užívateľského rozhrania alebo obnovenie UI do pôvodného stavu a pod. To sa vlastne deje vo chvíli, keď aplikáciu už užívateľ na displeji vidí, teda je potrebné s rozvahou určovať, čo sa deje v metóde tejto a v metóde predchádzajúcej. Sú volané po sebe s rozdielom niekoľkých málo milisekúnd.

5. applicationWillTerminate

Tento stav sa deje niekoľko milisekúnd pred ukončením aplikácie, teda pred skutočným ukončením aplikácie. Buď ručne z multitaskingu, alebo pri vypínaní prístroja. Metóda by mala byť využitá na uloženie rozpracovaných dát, na ukončenie všetkých činností a odstránenie dát, ktoré už nebudú potrebné.

6. applicationDidReceiveMemoryWarning

Práve posledný stav je najdiskutovanejší. Je zodpovedný za to, že v prípade nutnosti iOS odstráni z pamäte aplikáciu, pokiaľ zbytočne využíva systémové prostriedky. Neviem konkrétne, čo robí iOS s aplikáciami v pozadí, ale ak potrebuje po aplikácii, aby uvoľnila prostriedky iným procesom, varovaním pamäte ju vyzve, aby uvoľnila prostriedky, ktorými disponuje. V aplikácii sa teda táto metóda vyvoláva. Vývojári by ju mali implementovať tak, aby sa aplikácia vzdala pamäte, ktorú má pridelenú, uložila všetko rozpracované, vymazala nepotrebné dáta z pamäte a inak adekvátne uvoľnila pamät. Je pravda, že veľa vývojárov, napríklad začínajúcich, na takéto veci nemyslí alebo im nerozumie a potom sa môže diať, že ich aplikácia ohrozuje výdrž batérie a/alebo zbytočne konzumuje systémové prostriedky, a to aj na pozadí.

Verdikt

Týchto šesť stavov ak nim pridružené metódy sú v pozadí celého „multitaskingu“ v iOS. je to skvelý systém, pokiaľ vývojári neignorujú fakt, že je potrebné zodpovedne pristupovať k tomu, čo aplikácia natropí na prístrojoch ich užívateľov, pokiaľ sú minimalizované alebo dostanú varovania od systému a tak ďalej.

Zdroj: Macworld.com

Autori: Jakub Požiarok, Martin Doubek (ArnieX)

 
Máte tiež problém na riešenie? Potrebujete poradiť alebo napríklad nájsť tú správnu aplikáciu? Neváhajte a kontaktujte nás cez formulár v sekcii Poradňa, nabudúce zodpovieme napríklad práve vašu otázku.

.