Kdykoli aplikace běží na pozadí, spotřebovává část omezených zdrojů zařízení, například paměť RAM. To může mít za následek zhoršený uživatelský zážitek, zejména pokud uživatel používá aplikaci náročnou na zdroje, například při hraní hry nebo sledování videa. V zájmu zlepšení uživatelského zážitku zavádí systém Android 8.0 (úroveň API 26) omezení toho, co mohou aplikace dělat, když běží na pozadí. Tento dokument popisuje změny v operačním systému a popisuje, jak můžete aktualizovat svou aplikaci, aby dobře fungovala v rámci nových omezení.

Co je to služba v systému Android?

Nejprve si osvěžme, co je to služba v systému Android? Podle dokumentace k androidu:

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

V zásadě je tedy služba totéž co aktivita, ale nemá v sobě komponentu uživatelského rozhraní. Nemusí tedy provádět plynulou animaci při 60 fps. Proto může běžet vykonávat libovolnou úlohu po delší dobu než aktivita.

Existují tři typy služby:

  • Spuštěná služba – Služba je spuštěna, když komponenta aplikace (například aktivita) zavolá startService().
  • Vázaná služba – Služba je vázána, když se k ní komponenta aplikace váže voláním bindService().
  • Naplánovaná služba – Služba je naplánována, když rozhraní API, například JobScheduler.

Aplikace na pozadí vs. aplikace na popředí:

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

Pravidlo: Vaše aplikace bude považována za službu na popředí, pokud platí některý z následujících tří případů:

  1. Vaše aplikace má aktuálně viditelnou aktivitu.
  2. Vaše aplikace má spuštěnou službu na popředí.
  3. Vaše aplikace je připojena k jiné aplikaci na popředí prostřednictvím vazby služby nebo konzumací jejich poskytovatelů obsahu.

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

Proč potřebujeme 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:

Tyto dva zdroje jsou v mobilních zařízeních omezené a většina zařízení nižší a střední třídy nemá v sobě dostatek paměti ani baterie.

Předpokládejme, že pokud vaše aplikace provádí na pozadí nějaké velmi náročné úlohy a využívá k tomu větší množství paměti RAM, pak to způsobí velmi náročný uživatelský zážitek, zejména pokud uživatel používá jinou aplikaci náročnou na zdroje, například hraje hru nebo sleduje video na popředí.

Podle dokumentace ke spuštěné službě je nejlepším postupem,

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

Mnoho aplikací má však dlouho běžící služby na pozadí, které v podstatě běží nekonečně dlouho, aby buď udržovaly socketové spojení se serverem, nebo monitorovaly některé úlohy či činnost uživatele. Tyto služby způsobují vybíjení baterie a také neustále spotřebovávají paměť.

Od několika posledních vydání systému Android (počínaje Marshmallow) se společnost Google velmi snaží zvýšit výdrž baterie a snížit spotřebu paměti používanou aplikacemi zavedením režimu doze a pohotovostního režimu aplikací tím, že zpozdí provádění na pozadí o určitou dobu, pokud je telefon nečinný.

Většinou je však vývojáři i přes znalost nevýhod dlouho běžících služeb stále používají. (Většinou proto, že je snadnější je implementovat a udržovat než používat jiná řešení)

.