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.
Zdravíčko článok naozaj pekný ale zaujímalo by ma či to máte nejako technicky podložené. Pretože už niekoľkokrát som riešil večer pred spaním baterku a stalo sa že pri vypnutej wifi a mobilných dátach to zobralo viac ako v inom prípade s vypnutou wifi a iba 3G.
Bohužiaľ skúsenosť je taká, že v iOS sa aplikácie musia vypínať ručne a systému už sa tak dobre ako predtým nevedie.
iPhona som vymenil za Windows Phone (Samsung Omnia W za 6200,-) a rýchlosť systému je na úplne inej úrovni.
Obávam sa, že až prídu Metro tablety s Windows 8, vymením aj iPad…
@007 - áno, ak porovnávate starý iPhone3G s novými WP, potom áno (kto by to čakal, že?) WP bude o fúz rýchlejšie. Inak rozprávky o karlulke vám veľmi dobre nejdú a bolo vhodné porovnávať aktuálne HW. WP7 som tiež poridil a nakoniec skončil u 4s, ktorý predstavuje úplne iný level použiteľnosti ako WP7. Tak prajem príjemné a nekonečné skrolovanie dlazdicami.
Plne súhlasím s Pajou
ja by som zase prispel z trosku iného súdka - Samsung Galaxy S a iPhone 4 - povedal by som porovnateľne čo sa týka veku? V tej dobe iOS 4, a je čo sa týka pouzielnosti a rýchlosti niekde inde ako Android, koncept práce s aplikáciami má Apple vyriešený veľmi dobre, to isté už však neplatí s Androidom. Nakoniec som rovnako skončil u 4S a nemám jedine výtky, pretože „it just works“.. a pracuje veľmi zvižne!
Teória je krásna… V praxi ale napriek tomu aplikácia v lište zatváram ;)
Vďaka, veľmi zaujímavé, pragmatické, interesantné, nechýba to švih a hĺbku. Signifikantne podčiarkujúce obsesie dnešnej mládeže touto zakázanou značkou! Avšak vďaka za ňu, rovnako ako za tento článok.
Claniek je úplne zle.
Aplikácia sa po stlačení Home tlačidla neukončí, ako je mylne uvedené, ale pozastaví. Tj. rozhodne sa neodstráni z pamäte a neukonci. Len pozastaví beh, iOS dá tejto aplikácii 0% procesorového času. Rozhodne sa nikam „neswapuje“ do pamäte iZarizeni, ako je v clanku uvedené. Je to práve vďaka tomu, aby bolo možné využiť ten app switching.
Aplikácia je odstránená z pamäte až vo chvíli, keď má telefón malo pamäte pre beh ďalších aplikácií s vyššou prioritou (typicky iná aplikácia bezici na popredí).
V prvom prípade máte pravdu, jednalo sa o chybu v preklade. Čo sa týka swapovania, o tom tu nie je reč, bavíme sa o operačnej pamäti, nie o úložnom priestore v iOS zariadení.
obraz aplikácie sa uloží do pamäte na obmedzenú dobu pokiaľ nebude znovu vyvolaná príkazom (viď. 13,7 GB z 16 GB: tých 2,3 GB je vyhradené pre systém a pozastavenie aplikácií)
Tak je potrebné rozlišovať aplikácie ako sú Navigácia, Skype a ním podobné, tieto aplikácie aj na pozadí zostávajú aktívne, respektíve určitá funkcia sa neukončí a naďalej napríklad posiela dáta o svojom save, alebo informácie o polohe. Alebo ako Vokul v rezime pôrd počúvaj a multitasking stále počúva aj na pozadí.
Tieto aplikácie vybíjajú baterku a je potrebné ich ručne ukončiť a nečakať na iOS. u ostatných nie je treba, tam len v prípade že sa aplikácia sekne.
Nemôžem s článkom súhlasiť. Min. na iPade 1. generácie (iOS 5.0.1) je zreteľne spoznať, či mám v multitasking lište veľa „otvorených“ aplikácií alebo len pár. iOS sa síce snaží pamäť čistiť, ale evidentne to nestačí - malá veľkosť RAM je asi jeho najväčšou slabinou.
tak veľa záleží na systéme a použitom hardware, je celkom logický že to bude horšie na iPad 1 s iOS 5.0.1 ako keby to išlo na iPade 2.generácie
Je mi ľúto priateľa, toto je popis IDEALNÉHO spôsobu, ako by to malo fungovať. Bohužiaľ realita je úplne iná a vedeli by ste to, keby ste Apple výrobky používali, aspoň tak ako ja (tj občas).
„Často možno počuť povery, že aplikácie bežiace v iOS na pozadí zapĺňajú operačnú pamäť,“
To nie je povera, to je jednoducho fakt. Sam to ostatne tvrdíte v článku.
„Ako som už uviedol, používateľ nikdy nemusí ukončovať aplikácie bežiace na pozadí.“
NEZMYSEL. To je jednoducho blabol, jablčná propaganda, nehnevajte sa na mňa.
„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.“
Nie je pravda. Situácia je trochu iná. Typický príklad – mám spustené náročné aplikácie na pozadí, treba hry. Pustim prehliadač, otvorím pár tabu -> potreba viac pamäte. Čo sa stane? Náročné aplikácie na pozadia zostávajú, naopak SAM PREHLIADEC SPADNE. Ak tie náročné aplikácie ručne ukončím, prehliadač funguje dlhodobo bez problémov.
To je prax, nie teória. A čudujem sa, že ako dlhodobý užívateľ Apple výrobku to dodnes neviete.
Vďaka, je to veľmi dobre popísaný a dobre vysvetlené. Celkom si mi pomohol ;-) ♥
Len na úvod, nie som za ani proti iOS, tak rovnako ako u Androidu, ale je tu pár zvláštnych vecí, ak ako tu je napísané: " sa u iOS stretnete s pádom aplikácie len málokedy" tak u Androidu asi aplikácie padajú raz za rok : -P
http://dotekomanie.blog.mobilmania.cz/2012/02/stabilita-ios-vs-android/
To síce áno ale tých prípadov kedy je treba ukončiť aplikáciu ručne je naozaj minimum, použil som asi tak raz? ;-) a dávať sem odkaz na porovnávací test z mobilmanie je celkom zbytočné, až budem chcieť čítať o reklame čo platil google tak sa mrknem tam ;-) všetkým si do ruky akýkoľvek android telefón a nepobeží čisto, teda s výnimkou galaxy nexus ktorému je systém šitý viac-menej na mieru. Celkovo je android katastrofa
@Mek – Produkty Apple používam denne už niekoľko rokov a toto sa mi ešte nestalo, takže tá tvoja teória nejako nefunguje.
BURINA:
@redakcia – Je vidieť, že sa na webe stále nejako pracuje alebo sa s ním niečo deje, ale mám pocit, že nie je týždenne, aby všetko fungovalo ako má. A to už sem chodím skutočne malo, pretože tá nová podoba mi nevyhovuje. Využíval som aspoň mobilnú verziu na iPhone, ale tá mi teraz nefunguje vôbec – ako to? Momentálne hnevá odpovedanie na príspevky v komentarich.
@SteveJSF Bohužiaľ nie vždy sa veci dejú tak, ako by sme si priali. Čo sa týka odpovedí, tie rozbil nový SEO plugin, je to aktuálne v riešení.
WP-Touch nám tiež z nejakého dôvodu vypovedal službu, tak sme sa rozhodli, že radšej vymyslíme lepšie riešenie, než je tento plugin. Môžete sa teda čoskoro tešiť na ďalšiu novinku :-)
Pekný článok. Čo sa týka praxe, chcel by som povedať že s viacerými vecami súhlasím a väčšinou to tak ako je uvedené aj funguje, no bohužiaľ stále sa nájdu zle napísané aplikácie ktoré sa korektne nesprávajú a vtedy nastávajú prípady ako tu poznamenali niektorí čitateľi. Myslím si, že veľmi dobrým príkladom je Skype, ja z praxe viem že na pozadí beží stále (a to je v poriadku a tak to aj má byť) no problém je že táto aplikácia veľmi vybíja baterku prístroja a to už sa mi v poriadku nevidí . Naopak aplikácie ako je Facebook, Badoo a pod. tiež bežia stále na pozadí no ich odber je takmer nezaznamenateľný (aspoň ja žiadny nepozorujem). Takže si myslím, že chyba je v jednotlivých aplikáciách. Ak by sa vedelo v ktorých, stačilo by vypínať ručne len ich!
Takže prax je taká že facebook beží vkuse a skype ľan keď je potreba.
No na druhej strane ak potrebujem šetriť baterku a viem že musím udržať iPhone čo najdlhšie „nažive“, aj ja vypínam všetko nepotrebné v multitaskingu, no väčšinou to nemá veľký vplyv, ale podľa potreby si omedzím 3G, celý mobilný internet, WiFi, polohové služby , lietadlový režim, silu osvetlenia atď. No v rámci rutiny vypínam aj vyššie spomínané aplikácie v multitaskingu.
Takže osobne si myslím že článok je pravdivý, bohužiaľ niektorý programátori so svojimi aplikáciami tieto veci vyvracajú, pretože ich aplikácie sú nekorektné a na to sú podľa mňa len dve riešenia 1. alebo 2. Ak to možné nie je pozri napr. Skype napísať to daným programátorom v reporte a doufať že s tím niečo urobia.
Možno je zbytočné aplikácie ručne vypínať, napriek tomu to však robím. Skúsil som aj systém aplikácie nevypínať, nechať ich bežať (resp. nechať ich uspané v pozadí) a výdrž baterky bola oveľa nižšia, bol nutný aj reštart iPadu 2 po cca troch týždňoch, reagoval spomalene. Takže aplikácia vypínam ručne, baterka vydrží dlhšie, aktuálne som reštartoval naposledy na štedrý deň a beží v pohode.
Ostatne to isté robím aj v Mac OS X, aplikáciu, ktorú nepotrebujem, jednoducho vypnem (CMD+Q), je to lepšie ako aby bola uspaná v pozadí a žrala zbytočne RAM (s ktorou OS X navyše nevie veľmi dobre pracovať). Mám síce RAM málo, len 8 GB, ale vo Windows 7 sa mi s 8 GB nestalo, že by systém reagoval spomalene alebo swapoval, v OS X je to celkom častý jav (počítač som nikdy nevypínal, robím to aj s Macom, takže mesiac aj viac up time nie je výnimkou, problém je, že Maca musím občas preventívne reštartovať kvôli uvoľneniu RAM a „zvýšeniu rýchlosti“, Windows 7 toto nepotrebujú).
Skôr by ma zaujímalo, ako aplikáciu naozaj odstreliť. Stalo sa mi, že aplikácia (konkrétne na Geocaching) sa dostala do stavu, keď načítala niečo z materského servera av tomto stave uviazla. Home button fungoval, po novom spustení sa to vrátilo do stuhnutého stavu (tam kde som skončil). Ručné ukončenie (do ponuky multitastingu, pridržať ikonu a mínusom zavrieť) = aplikácia zmizla, po novom spustení sa otvorila v pôvodnom stave tam kde mi to vytuhlo. Pozavieral som teda všetko, vypol telefón, zapol, dvojklik HOME a hľa – aplikácie tam boli všetky ako pred ich zatvorením tesne pred vypnutím. Nepomohol ani reštart – držať home a vrchný, než to chcípne. Jediné čo pomohlo je odobrať aplikáciu z telefónu, reštart, a jej novú inštaláciu do telefónu. Nejako som to nepobral.
Tento Multitasking manažment funguje a je veľa na vývojároch, ako sa s týmito stavmi vyrovnajú. Pre záujemcov o detailnejší a odbornejší popis celej situácie tu napíšem ako sa to má.
Aplikácia môže reagovať celkom na 6 stavov a tieto stavy sú:
applicationWillResignActive
applicationDidEnterBackground
applicationWillEnterForeground
applicationDidBecomeActive
applicationWillTerminate
applicationDidReceiveMemoryWarning
Teraz sa pokúsim tieto stavy popísať bližšie.
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ívnej aplikácie (teda aplikácie v popredí) toto sa deje napríklad pri príjme hovoru v čase 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.
applicationDidEnterBackground – tento stav indikuje, že aplikácia voš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 pokiaľ to pre beh aplikácie nie je kritické aby spojenie dokončovala aj na pozadí. V podstate táto metóda keď je v aplikácii vyvolaná by mala slúžiť na úplné pozastavenie aplikácie pokiaľ niektorá jej časť nie je požadovaná aby bežala na pozadí.
applicationWillEnterForeground – tento stav je opakom stavu prvého, kedy aplikácia bude rezignovať na aktívny stav. Tento stav aplikácie jednoducho znamená, že uspaná aplikácia počas niekoľkých nasledujúcich milisekúnd bude obnovená z pozadia a zobrazí sa na popredí (aplikácia vstúpi do popredia), 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.
applicationDidBecomeActive – tento 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 používateľského rozhrania alebo obnovenie UI do pôvodného stavu a pod. táto metóda 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 av metóde predchádzajúcej. Sú volané po sebe s rozdielom niekoľkých málo milisekúnd.
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. Táto metóda by mala byť využitá na uloženie rozpracovaných dát a na ukončenie všetkých činností a odstránenie dát, ktoré už nebudú potrebné.
applicationDidReceiveMemoryWarning – a toto je stav, o ktorom sa tu diskutuje veľa, ž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 vyzve jej varovaním pamäte aby uvoľnila prostriedky, ktoré má v držbe. Teda sa v aplikácii vyvolá táto metóda a to by vývojári mali implementovať tak aby sa aplikácia vzdala pamäte, ktorú má v držbe, uložila rozpracované a 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 aj v pozadí. Neviem ako sa iOS zachová keď aplikácia po obdržaní memory warningu neurobí nič a ďalej konzumuje systémové prostriedky ako predtým.
Týchto pár stavov a tomu pridružených metód je v pozadí celého „multitaskingu“ v iOS… je to skvelý systém pokiaľ vývojári neignorujú to, ž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 ďalšie …
Dúfam, že tento stručný popis pomôže porozumieť tomu ako sa aplikácia podieľa na tom, aby všetko hladko fungovalo. Takže je skoro možné povedať, že je to chybou nesprávneho používania užívateľom čo možno chápať ako - ak používate aplikácie väčšinou zadarmo od amatérskych vývojárov vo veľkom množstve tak vám iOS zariadenie pobeží horšie, než keď používate vo veľkom množstve zadarmo aj platené aplikácie od skúsených či profesionálnych vývojárov. Tým nechcem povedať, že nie sú v oboch kruhoch výnimky. Celkom dosť divne a náročne sa chová napríklad foursquare a pritom by sa dalo už očakávať, že sa jedná o veľmi zdatných vývojárov, ktorí memory a battery manažmentu dajú veľa času, opak je ale pravdou. Najväčším problémom 4SQ je komunikácia so servermi, ktorá často viazne a je prehltená. To len ako ukážka toho, že aj známe aplikácie majú problémy čo nič nemení na tom, že 4SQ je super služba.
Majte sa Jabĺčkovo!! :)
Informácie sme s láskavým dovolením autora doplnili do článku ;-)
Ospravedlňujem sa všade bol medzi odsekmi ENTER, mohli by s tým tu niečo urobiť aby komentáre mali aspoň trochu RICH TEXT FORMATING.
ArnieX: vďaka za komentár!
To Faramir: ja len k tvojmu problému, neviem či to pomôže aj v tvojom prípade, no z vlastných skúseností viem že ak ukončíš aplikáciu (v multitaskingu) tak pár sekúnd trvá pokiaľ ju ukončí, takže ak ju vypneš odporúčam pár sekúnd počkať (ja pre istotu čakám cca 10s) kým je úrčite ukončená a až potom ju opätovne spustím.
Nie je zač ;) rád pomôžem keď mám možnosť nejako prispieť.
Ako je to potrebné s Meebom, keď sa cez neho prihlasím na ICQ alebo FB chat tak po 10 minútach sa to automaticky odhlasí a ja prejdem do offline alebo to bez furt? vďaka za objasnenie :P
Po desiatich minútach sa iba preruší spojenie aplikácie s internetom. Na serveri Meeba však stále budete online a pokiaľ vám niekto napíše, dôjde vám push notifikácia. Po znovuotvorení aplikácie počas chvíle bude nadviazané spojenie a môžete veselo chatovať ďalej.
Tak ak som vami odkazovaný článok pochopil správne, tak štatistika sa týka iba pádu aplikácií pri ich štarte, čo je dosť malé percento prípadov, kedy môže k pádu dôjsť. Teda usudzovať z tohto „výskumu“, že iOS je menej stabilný podľa mňa nemožno. Ďalej sa zabudol prekladateľ článku prevzatého z Forbesu spomenúť, že spoločnosť, ktorá dáta o pádoch aplikácií poskytuje, je podporovaná oi Googlom („Crittercism, which is backed by Google Ventures, …“).