Úvod do zpracovávání úloh na pozadí v iOSu

iOS reguluje zpracování na pozadí velmi těsně a nabízí tři přístupy k jeho implementaci:

  • Zaregistrovat úlohu na pozadí – Pokud aplikace potřebuje dokončit důležitou úlohu, může požádat iOS, aby úkol nepřerušil, když se aplikace přesune na pozadí. Aplikace může například potřebovat dokončit protokolování uživatele nebo dokončit stahování velkého souboru.
  • Zaregistrovat jako aplikaci potřebnou na pozadí – Aplikace se může zaregistrovat jako konkrétní typ aplikace, která má známé, specifické požadavky na pozadí, jako je Zvuk , VoIP , Externí příslušenství , Newsstand a Umístění . Tyto aplikace mají povolená oprávnění průběžného zpracování na pozadí, pokud provádějí úlohy, které jsou v rámci parametrů registrovaného typu aplikace.
  • Povolit Aktualizace na pozadí – Aplikace můžou aktivovat aktualizace na pozadí s monitorováním oblastí nebo nasloucháním významných změn umístění . Od iOSu 7 se aplikace můžou také zaregistrovat k aktualizaci obsahu na pozadí pomocí funkce Načítání na pozadí nebo vzdálených oznámení .

Stavy aplikací a metody delegáta aplikace

Než se ponoříme do kódu pro zpracování na pozadí v iOSu, musíme pochopit, jak má pozadí vliv na životní cyklus aplikace pro iOS.

Životní cyklus aplikace pro iOS je kolekce stavů aplikací a metod pro přesun mezi nimi. Aplikace přechází mezi stavy na základě chování uživatele a požadavků aplikace na pozadí. Pohyb znázorňuje následující diagram:

Application States and Application Delegate Methods diagram

  • Není spuštěno – Aplikace se na zařízení ještě nespustila.
  • Spuštěno/aktivní – aplikace je na obrazovce a spouští kód v popředí.
  • Neaktivní – aplikace je přerušena příchozím telefonním hovorem, textem nebo jiným přerušením.
  • Pozadí – Aplikace se přesune na pozadí a pokračuje v provádění kódu na pozadí.
  • Pozastaveno – Pokud aplikace nemá žádný kód ke spuštění na pozadí nebo pokud je veškerý kód dokončený, bude aplikace pozastavena operačním systémem. Pozastavený proces aplikace je udržován naživu, ale aplikace nemůže spustit žádný kód v tomto stavu.
  • Vraťte se do stavu Neběží nebo ukončení (vzácné) – Někdy dojde ke zničení procesu aplikace a aplikace se vrátí do stavu Není spuštěno . K tomu dochází v situacích s nedostatkem paměti nebo pokud uživatel aplikaci ukončí ručně.

Vzhledem k tomu, že zavedení podpory multitaskingu, iOS zřídka ukončí nečinné aplikace a místo toho udržuje své procesy pozastavené v paměti. Udržování procesu aplikace naživu zajišťuje, že se aplikace spustí rychle při příštím otevření aplikace. To také znamená, že aplikace se můžou volně přesouvat ze stavu Suspended zpět do stavu Backgrounded bez kreslení systémových prostředků. iOS 7 tuto funkci využívá s novými rozhraními API, která aplikacím umožňují pozastavit úlohy na pozadí, když zařízení přejde do režimu spánku, aktualizuje obsah přímo z pozadí bez zásahu uživatele a další. Nová rozhraní API probereme v technikách pozadí iOS.

Metody životního cyklu aplikace

Když aplikace změní stav, iOS upozorní aplikaci prostřednictvím metod událostí ve AppDelegate třídě:

  • OnActivated – Tomu se říká při prvním spuštění aplikace a pokaždé, když se aplikace vrátí do popředí. Toto je místo pro vložení kódu, který se musí spustit při každém otevření aplikace.
  • OnResignActivation – Pokud uživatel obdrží přerušení, jako je například text nebo telefonní hovor, zavolá se tato metoda a aplikace se dočasně aktivuje. Pokud uživatel přijme telefonní hovor, aplikace se odešle na pozadí.
  • DidEnterBackground - Volá se, když aplikace přejde do stavu na pozadí, tato metoda poskytne aplikaci asi pět sekund, aby se připravila na možné ukončení. Tentokrát můžete ukládat uživatelská data a úkoly a odebírat citlivé informace z obrazovky.
  • WillEnterForeground - Když se uživatel vrátí na pozadí nebo pozastavenou aplikaci a spustí ji do popředí, WillEnterForeground zavolá se. Toto je čas připravit aplikaci na popředí tím, že dosadíte libovolný stav uložený během DidEnterBackground . OnActivated bude volána okamžitě po dokončení této metody.
  • WillTerminate - Aplikace se vypne a její proces se zničí. Tato metoda se volá pouze v případě, že multitasking není k dispozici na zařízení nebo verzi operačního systému, pokud je nedostatek paměti nebo pokud uživatel ručně ukončí aplikaci na pozadí. Upozorňujeme, že pozastavené aplikace, které se ukončí, nebudou volat WillTerminate .

Následující diagram znázorňuje, jak dohromady odpovídají stavy aplikací a metody životního cyklu:

This diagram illustrates how the application states and lifecycle methods fit together

Uživatelské ovládací prvky pro pozadí v iOSu

iOS 7 představil několik funkcí, které uživatelům poskytují větší kontrolu nad stavem na pozadí aplikace. Přepínač aplikací i nastavení Aktualizace aplikace na pozadí ovlivňují životní cyklus aplikace.

Přepínač aplikací

Přepínač aplikací je důležitá funkce řízení představená v iOSu 7. Spustí se poklepáním na tlačítko Domů a zobrazí aplikace, jejichž procesy jsou aktivní:

Moving between apps using the App Switcher

Pomocí přepínače aplikací můžou uživatelé procházet snímky všech aplikací na pozadí a pozastavených aplikací. Klepnutím na aplikaci ji spustíte do popředí. Potažením prstem odeberete aplikaci z pozadí a ukončete její proces. Podrobněji se podíváme na přepínač aplikací v ukázce životního cyklu aplikace pro iOS v další části.

Důležité

Přepínač aplikací nezobrazuje rozdíl mezi aplikacemi na pozadí a pozastavenými aplikacemi.

Nastavení aktualizace aplikace na pozadí

iOS 7 zvyšuje uživatelskou kontrolu nad životním cyklem aplikace tím, že uživatelům umožňuje vyjádřit výslovný nesouhlas se zpracováním na pozadí pro aplikace registrované ke zpracování na pozadí. To nezabrání aplikacím ve spouštění úloh na pozadí.

Uživatelé můžou toto nastavení změnit tak, že přejdou na Nastavení > Obecné > aktualizace aplikace na pozadí a upraví oprávnění na pozadí pro vybranou aplikaci. Pokud je aktualizace aplikace na pozadí vypnutá, aplikace se okamžitě pozastaví po vstupu na pozadí a zabrání zpracování na pozadí:

Background App Refresh Settings

Vývojáři můžou pomocí rozhraní API zkontrolovat stav BackgroundRefreshStatus aplikace aktualizace na pozadí. Příklad najdete v receptu zkontrolovat nastavení aktualizace na pozadí.

Probrali jsme základy životního cyklu aplikací pro iOS a funkce pro řízení životního cyklu aplikace. V dalším kroku se podíváme na životní cyklus aplikace pro iOS v akci.