Jak zacházet se službami na pozadí v ANDROID O?

Nic nečiní vývojáře Androidu šílenějšího než nová verze Androidu.

Google právě odhalil DP1 další iterace androidu: Android O. Existuje mnoho nových vzrušujících funkcí a pod kapotou zlepšení výkonu v nejnovější verzi androidu.

Zatímco ostatní mluví o tom, jaký bude název Androidu O, analyzujme tuto příchuť androidu z pohledu vývojáře. Pro vývojáře Androidu existují čtyři průkopnické změny:

  • Limity provádění na pozadí
  • Limit aktualizací polohy
  • Odstranění implicitních vysílání
  • Informační kanály

V tomto článku si povíme o omezení provádění na pozadí. Omezení provedení na pozadí se vztahují hlavně na dvě hlavní složky:

  • Služba
  • Wakelocks

Pojďme mluvit o omezeních, která platí pro služby v tomto článku.

Co je služba v systému Android?

Pojďme nejprve obnovit, co je služba v systému Android? Podle dokumentace k systému Android:

Služba je komponenta aplikace, která může provádět dlouhodobé operace na pozadí a neposkytuje uživatelské rozhraní.

Služba je tedy v zásadě stejná jako aktivita, ale neobsahuje v ní komponentu uživatelského rozhraní. Nemusí tedy provádět plynulé animace při 60 fps. To je důvod, proč může běžet provádět jakýkoli úkol po delší dobu, než je aktivita.

Existují tři typy služeb:

  • Started Service - Služba se spustí, když komponenta aplikace (například aktivita) volá startService ().
  • Vázaná služba - Služba je vázána, když se na ni součást aplikace váže voláním bindService ().
  • Plánovaná služba - služba je naplánována, když API, jako je JobScheduler.

Aplikace na pozadí v popředí:

Abychom se naučili změny provádění pozadí, musíme nejprve poznat rozdíl mezi aplikací na pozadí a v popředí.

Obecně platí, že vaše žádost bude považována za popředí, pokud platí některý z níže uvedených tří případů:

  1. Vaše aplikace má aktuálně viditelnou aktivitu.
  2. Ve vaší aplikaci je spuštěna služba v popředí.
  3. Vaše aplikace je propojena s jinou aplikací v popředí tím, že zaváže službu nebo spotřebuje jejich poskytovatele obsahu.

Pokud některý z výše uvedených scénářů není v aktuální instanci pravdivý, je vaše aplikace považována za pozadí.

Proč musíme omezit používání služeb na pozadí?

Kdykoli vaše aplikace běží na pozadí pomocí služeb, vaše aplikace spotřebovává dva cenné zdroje: 1) paměť a 2) baterii.

Jedná se o omezené zdroje na mobilních zařízeních a většina zařízení s nízkým až středním dosahem nemá v sobě dostatek paměti ani baterie.

Předpokládejme, že pokud vaše aplikace provádí na pozadí velmi náročné úkoly a k provádění tohoto úkolu používá větší množství paměti RAM, vytvoří se tím velmi radostné uživatelské prostředí, zejména pokud uživatel používá jinou aplikaci náročnou na zdroje, například hraní hry nebo sledování videa v popředí.

Podle dokumentace pro zahájenou službu je nejlepší praxe,

Po dokončení operace by se měla služba zastavit sama.

Mnoho aplikací však má dlouhodobě spuštěné služby na pozadí, které v podstatě běží po nekonečný čas, aby buď udržovaly soketové spojení se serverem nebo monitorovaly některé úkoly nebo aktivitu uživatelů. Tyto služby vytvářejí vybití baterie a také neustále spotřebovávají paměť.

Od několika posledních vydání androidu (od Marshmallow) se Google snaží velmi těžko zvýšit životnost baterie a snížit spotřebu paměti používané aplikacemi zavedením režimu doze a pohotovostního režimu aplikace tím, že zpoždění spuštění pozadí o určitou dobu zpozdí pokud je telefon nečinný.

Ale většinu času, přestože znají nevýhody dlouhodobých služeb, které vývojáři stále používají. (Většinou proto, že je snadné implementovat a udržovat spíše než používat jiná zástupná řešení.)

Jaká jsou omezení služeb začínající na Android O?

Od aplikace Android O, pokud je vaše aplikace na pozadí (zaškrtněte výše tři podmínky), může vaše aplikace na několik minut vytvářet a spouštět služby na pozadí.

Po uplynutí několika minut vstoupí aplikace do klidového stavu. Když aplikace vstoupí do klidového stavu, systém zastaví všechny služby na pozadí stejně jako vaše servisní volání Service.stopSelf ().

A tady je zábavná část…

Jak jsem diskutoval výše, problém vybití baterií a spotřeby paměti jsou způsobeny hlavně spuštěnými službami. Chcete-li to vyloučit, Android O zcela zabraňuje použití metody startService () ke spuštění služby. Pokud na Android O voláte startService (), nakonec získáte IllegalArgumentException .

V těchto scénářích jsou některé výjimky, pokud je vaše aplikace na určitou dobu dočasně zařazena na bílou listinu. Během tohoto období může vaše aplikace volně vytvářet služby na pozadí. Aplikace se umístí do dočasného seznamu povolených v níže uvedených situacích:

  • Když byla přijata zpráva FCM s vysokou prioritou
  • Příjem Broadcas
  • Provedení PendingIntent z oznámení.

Jak můžete provádět úkoly na pozadí?

Vytváříte-li velmi rozsáhlou aplikaci pro Android, mohou existovat nějaké skutečné scénáře, kde budete muset provést některé úkoly na pozadí. Protože spuštění služby pomocí příkazu startService () není možnost, musíme najít další způsoby, jak provádět úkoly na pozadí.

Plánování úkolů pomocí rozhraní API pro plánování úloh:

  • Api JobScheduler zaveden v API21 k provádění úkolů na pozadí.
  • Toto API vám umožňuje spouštět naplánovanou službu a systém Android bude dávkovat všechny služby z různých aplikací a spouštět je společně v určitém časovém rámci. Důvodem je zkrácení doby, po kterou se CPU a rádio telefonu probudí spojením úkolů dohromady. To spotřebovává méně baterie a udržuje zdraví systému.
  • Co když má vaše aplikace minSdkVersion <21? V této situaci je oficiálním způsobem naplánování úlohy použití Firebase Job Dispatcher. Firebase Job Dispatcher je podporován až dolů po API9.

Použijte službu v popředí

Pokud chcete, aby se na pozadí prováděly některé dlouhodobé úkoly, zvažte použití popředí pro tento účel. Žádné z výše uvedených omezení provádění pozadí se nevztahuje na služby v popředí.

To také zajistí, aby si uživatel uvědomil, že vaše aplikace provádí některé úkoly na pozadí zobrazením probíhajícího upozornění. Tím se zvýší transparentnost s vaším uživatelem.

Před Android O, pokud chcete vytvořit službu v popředí, obvykle spustíte službu na pozadí voláním startService (). Poté můžete službu povýšit na službu popředí přiřazením průběžného oznámení metodou startForeground (). Ale od Android O již nemůžete používat startService (). Chcete-li tedy vytvořit službu v popředí, musíte použít NotificationManager.startServiceInForeground (). Tato metoda je ekvivalentní vytvoření služby na pozadí a její propagaci na kombinaci služeb v popředí.

Závěr:

Tato omezení aplikovaná na službu na pozadí jistě zajistí prodloužení životnosti baterie a také nižší využití paměti RAM. V konečném důsledku bude vaše aplikace hladká a váš uživatel bude spokojený.

Pokud nyní provedete změny v kódu aplikace?

Android O je stále v DP1. Před vydáním konečné verze systému Android O jsou k dispozici další 3 náhledy pro vývojáře. V nadcházejících vydáních mohou být některé změny API. Teď je čas přemýšlet o účincích těchto změn ve vaší aplikaci a přemýšlet o jejich alternativním řešení. Jakmile bude uvolněn náhled vývojáře 3–4, aplikujte tyto změny na své aplikace a zajistěte kompatibilitu aplikace Android O.

https://paypal.me/kpatel2106?locale.x=en_GB

~ Pokud se vám článek líbil, klikněte níže na , aby ho vidělo více lidí! Můžete mě také sledovat na médiu nebo na mém blogu, takže získáte aktualizace týkající se mých budoucích článků !! ~