Zavřít reklamu

Stále ještě spoustu lidí neví, jak funguje multitasking v iOS. Pro začátek je však nutné upozornit, že se nejedná o skutečný multitasking ale o velice chytré řešení které nezatěžuje systém ani uživatele.

Často lze slyšet pověry, že aplikace běžící v iOS na pozadí zaplňují operační paměť, což vede ke zpomalení systému a snížení výdrže baterie, proto by je měl uživatel vypínat manuálně. Lišta pro multitasking ve skutečnosti neobsahuje seznam všech běžících procesů na pozadí ale pouze naposledy spuštěné aplikace. Uživatel se tedy nemusí starat o procesy běžící na pozadí s výjimkou několika málo případů. Když stisknete Home button, tak se aplikace většinou uspí, nebo se ukončí, takže nadále nezatěžuje procesor ani baterii a v případě potřeby uvolní potřebnou paměť.

Nejedná se tedy o plnohodnotný multitasking kdy vám běží desítky procesů.V popředí běží vždy jen jedna aplikace, která se v případe potřeby pozastaví nebo úplně vypne. Na pozadí pak běží jen několik podružných procesů. Proto se u iOS setkáte s pádem aplikace jen málokdy, například Android je zahlcen běžícími aplikacemi o které se uživatel musí starat. To jednak znepříjemňuje práci se zařízením a na druhou stranu způsobuje například pomalé spouštění a přechody mezi aplikacemi.

Typ běhu aplikace

Aplikace na vašem iOS zařízení se nachází v jednom z těchto 5 stavů :

  • Běží: aplikace je spuštěna a běží na popředí
  • Na pozadí: je stále spuštěna ale běží na pozadí ( můžeme používat další aplikace )
  • Pozastavena: Pořád využívá operační paměť ale není spuštěna
  • Neaktivní: aplikace je spuštěna ale nepřímá příkazy ( například když uzamknete zařízení se spuštěnou aplikací )
  • Neběží: Aplikace byla ukončena nebo nebyla spuštěna

Zmatky nastanou, jakmile aplikace přejde na pozadí, aby nerušila. Když stisknete Home button nebo použijete gesto pro ukončení aplikace (iPad) tak aplikace přejde na pozadí. Většina aplikací je pozastavena během několika vteřin (Ukládají se do operační paměti iZařízení, aby mohli být rychle spuštěny, tolik nezatěžují procesor a tím šetří výdrž baterie) Mohli byste si myslet, že pokud aplikace nadále využívá paměť, budete jí muset odstranit ručně pro její uvolnění. Ale to vy dělat nemusíte, protože to za vás iOS udělá sám. Máte-li  na pozadí pozastavenou náročnou aplikaci, jakou je třeba hra, která využívá velkou část operační paměti , iOS ji v případě potřeby automaticky odstraní z paměti a vy ji znovu spustíte klepnutím na ikonu aplikace.

Žádný z těchto stavů se neprojeví v liště multitaskingu, panel zobrazuje pouze seznam naposledy spuštěných aplikací bez ohledu na to, zda je aplikace zastavená, pozastavená nebo běží na pozadí. Můžete si také všimnout že aplikace která je právě spuštěná se v Multitasking panelu neobjeví

Úkoly na pozadí

Normálně, když stisknete Home button, tak aplikace poběží na pozadí a pokud jí zrovna nepoužíváte, tak se do pěti vteřin automaticky pozastaví. Takže pokud stahujete třeba podcast, tak to systém vyhodnotí jako spuštěnou aplikaci a odloží ukončení o deset minut. Nejpozději po deseti minutách se proces uvolní z paměti. Zkrátka se nemusíte obávat že stiskem Home Button přerušíte svoje stahování, pokud není třeba více jak 10 minut pro jeho dokončení.

Neurčitý běh na pozadí

Při nečinnosti systém aplikaci ukončí do pěti sekund a v případě stahování se ukončení odloží o deset minut. Existuje však malé množství aplikací které vyžadují běh na pozadí. Zde je pár příkladů aplikací které mohou v iOS 5 běžet na pozadí neomezeně dlouhou dobu:

  • Aplikace které přehrávají zvuk a musí se na chvíli přerušit (pozastavení hudby při telefonátu apod.),
  • Aplikace které sledují vaši polohu (navigační software),
  • Aplikace přijímající VoIP hovory, například pokud používáte Skype tak můžete přijmout hovor i když je aplikace na pozadí,
  • Automatické stahování ( například Newsstand ).

Všechny aplikace by měli být ukončeny, pokud již nevykonávají daný úkol (například stahování na pozadí). Existují však výjimky, které běží na pozadí nepřetržitě, například nativní aplikace Mail. Pokud jsou spuštěny na pozadí, tak zahlcují paměť, využití procesoru nebo snižují výdrž baterie

Aplikace, které mají povoleno běžet na pozadí neomezeně dlouhou dobu, mohou dělat cokoliv jako když jsou spuštěné, a to od přehrávání hudby až po stahování nových epizod Podcastů.

Jak jsem již uvedl, uživatel nikdy nemusí ukončovat aplikace běžící na pozadí. Jedinou z těchto výjimek je, když aplikace běžící na pozadí spadne nebo se ze spánku neprobudí správně. To pak může uživatel ukončit aplikace ručně v liště multitaskingu, ale to se stává zřídkakdy.

Obecně tedy platí, že nemusíte řídit procesy na pozadí, protože se o ně systém postará sám. Proto je iOS tak svěží a rychlý systém.

Z pohledu vývojáře

Aplikace může v rámci multitaskingu reagovat celkem šesti různými stavy:

1. applicationWillResignActive

Tento stav v překladu znamená, že aplikace bude v budoucnu (otázka několika málo milisekund) rezignovat na post aktivní aplikace (tedy aplikace v popředí). Toto se děje například při příjmu hovoru v době používání aplikace, ale zároveň se tato metoda tedy tento stav vyvolá i před přechodem aplikace do pozadí, tedy je potřeba s těmito změnamy počítat. Tato metoda je vhodná také pro to aby například právě při příchozím hovoru pozastavila veškerou činnost, kterou provadí a počkala až na ukončení hovoru.

2. applicationDidEnterBackground

Stav indikuje, že aplikace přešla do pozadí. Vývojáři by tuto metodu měli využít k pozastavení všech procesů, které nutně nemusí běžet na pozadí a měli by vyčistit paměť od nevyužívaných dat a dalších procesů, například by měli ukončit platnost časovačů, vymazat z paměti načtené obrázky, které nebudou nutně potřeba, anebo ukončit spojení se servery, pokud to pro běh aplikace není kritické, aby spojení dokončovala i na pozadí. Když je v aplikaci metoda vyvolána, v podstatě by měla sloužit k úplnému pozastavení aplikace, pokud některá její část není požadována aby běžela na pozadí.

3. applicationWillEnterForeground

Tento stav je opakem stavu prvního, kdy aplikace bude rezignovat na aktivní stav. Stav jednoduše znamená, že uspaná aplikace během několika následujících milisekund bude obnovena z pozadí a zobrazí se v popředí. tuto metodu by vývojáři měli využít k obnovení všech procesů, které byly neaktivní v době, kdy aplikace byla na pozadí. Mělo by dojít k obnovení spojení se servery, znovunastavení časovačů, načtení obrázků a dat do paměti a další potřebné procesy se mohou obnovit těsně před tím, než uživatel znovu uvidí načtenou aplikaci.

4. applicationDidBecomeActive

Stav indikuje to, že aplikace se po obnovení do popředí stala právě aktivní. Toto je metoda, která se dá využít k dodatečným úpravám uživatelského rozhraní nebo obnovení UI do původního stavu apod. To se vlastně děje ve chvíli, kdy aplikaci už uživatel na displeji vidí, tedy je potřeba s rozvahou určovat, co se děje v metodě této a v metodě předchozí. Jsou volány po sobě s rozdílem několika málo milisekund.

5. applicationWillTerminate

Tento stav se děje několik milisekund před ukončením aplikace, tedy před skutečným ukončením aplikace. Buď ručně z multitaskingu, nebo při vypínání přístroje. Metoda by měla být využita k uložení rozpracovaných dat, k ukončení všech činností a odstranění dat, které již nebudou potřeba.

6. applicationDidReceiveMemoryWarning

Právě poslední stav je nejdiskutovanější. Je zodpovědný za to, že v případě nutnosti iOS odstraní z paměti aplikaci, pokud zbytečně využívá systémových prostředků. Nevím konkrétně, co dělá iOS s aplikacemi v pozadí, ale pokud potřebuje po aplikaci, aby uvolnila prostředky jiným procesům, varováním paměti ji vyzve, aby uvolnila prostředky, kterými disponuje. V aplikaci se tedy tato metoda vyvolává. Vývojáři by ji měli implementovat tak, aby se aplikace vzdala paměti, kterou má přidělenou, uložila vše rozpracované, vymazala nepotřebná data z paměti a jinak adekvátně uvolnila pamět. Je pravda, že hodně vývojářů, třeba začínajících, na takovéto věci nemyslí nebo jim nerozumí a pak se může dít, že jejich aplikace ohrožuje výdrž baterie a/nebo zbytečně konzumuje systémové prostředky, a to i na pozadí.

Verdikt

Těchto šest stavů a k nim přidružené metody jsou v pozadí celého „multitaskingu“ v iOS. je to skvělý systém, pokud vývojáři neignorují fakt, že je potřeba zodpovědně přistupovat k tomu, co aplikace natropí na přístrojích jejich uživatelů, pokud jsou minimalizovány nebo dostanou varování od systému a tak dále.

Zdroj: Macworld.com

Autoři: Jakub Požárek, Martin Doubek (ArnieX)

 
Máte také problém k řešení? Potřebujete poradit nebo třeba najít tu správnou aplikaci? Neváhejte a kontaktujte nás přes formulář v sekci Poradna, příště zodpovíme třeba právě váš dotaz.

.