Wanneer een app op de achtergrond draait, verbruikt deze een deel van de beperkte bronnen van het apparaat, zoals RAM. Dit kan leiden tot een verminderde gebruikerservaring, vooral als de gebruiker een app gebruikt die veel bronnen gebruikt, zoals het spelen van een spel of het bekijken van video. Om de gebruikerservaring te verbeteren, legt Android 8.0 (API-niveau 26) beperkingen op aan wat apps kunnen doen terwijl ze op de achtergrond draaien. Dit document beschrijft de wijzigingen in het besturingssysteem, en hoe u uw app kunt bijwerken om goed te werken onder de nieuwe beperkingen.

Wat is de service in android?

Laten we eerst opfrissen wat is de service in Android? Volgens de Android-documentatie:

Een Service is een toepassingscomponent die langlopende bewerkingen op de achtergrond kan uitvoeren en geen gebruikersinterface biedt.

Dus, in principe is Service hetzelfde als de activiteit, maar het heeft niet de UI-component in zich. Hij hoeft dus geen vloeiende animatie met 60 fps uit te voeren. Dat is de reden waarom het kan elke taak uitvoeren voor de langere periode van tijd dan de activity.

Er zijn drie soorten van de service:

  • Gestart Service – Een service wordt gestart wanneer een applicatie-component (zoals een activiteit) roept startService().
  • Gebonden Service – Een service is gebonden wanneer een applicatie-component bindt aan het door het aanroepen van bindService().
  • Geplande service – Een service is gepland wanneer een API zoals de JobScheduler.

Background vs Foreground toepassingen:

Om te leren achtergrond uitvoering verandert, moeten we weten het verschil tussen achtergrond en voorgrond toepassing eerst.

Vuistregel, zal uw toepassing worden beschouwd als een voorgrond dienst indien een van de onderstaande drie gevallen waar:

  1. Uw toepassing heeft momenteel zichtbaar activiteit.
  2. Uw toepassing heeft voorgrond service running.
  3. Uw toepassing is verbonden met een andere voorgrond app door het binden van de dienst of door het consumeren van hun content providers.

Als een van de bovenstaande scenario’s niet waar is in de huidige instantie, wordt uw toepassing beschouwd als zijnde op de achtergrond.

Waarom moeten we het gebruik van achtergronddiensten beperken?

Wanneer uw toepassingen op de achtergrond draaien met behulp van diensten, verbruikt uw toepassing twee kostbare hulpbronnen: 1) Geheugen en 2) Batterij.

Deze twee zijn beperkt middelen op de mobiele apparaten en de meeste van de lage tot mid-range apparaten niet genoeg geheugen of batterij in it.

Suppose, als uw toepassing is het doen van een aantal zeer intensieve taken op de achtergrond en het gebruik van de grotere hoeveelheid RAM om die taak uit te voeren, dan zal dit de zeer junky gebruikerservaring, vooral als de gebruiker is het gebruik van een andere resource-intensieve app, zoals het spelen van een spel of het bekijken van een video op de voorgrond.

Volgens de documentatie voor de gestarte service is de beste werkwijze,

Wanneer de bewerking is voltooid, moet de service zichzelf stoppen.

Maar veel applicaties hebben langlopende achtergronddiensten, die in principe oneindig lang worden uitgevoerd om ofwel de socketverbinding met de server in stand te houden of bepaalde taken of gebruikersactiviteiten te bewaken. Deze diensten creëren batterij drain en ook zij voortdurend verbruikt geheugen.

Van de laatste paar releases van Android (vanaf Marshmallow), Google probeert heel hard om de levensduur van de batterij te verhogen en het geheugengebruik gebruikt door de toepassingen te verminderen door de invoering van de doze-modus en app stand-by door het uitstellen van de achtergrond uitvoering door een bepaalde hoeveelheid tijd als de telefoon inactief is.

Maar de meeste van de tijd ondanks het kennen van de nadelen van de langlopende diensten ontwikkelaars nog steeds gebruik van hen. (Vooral omdat het gemakkelijk te implementeren en te onderhouden is in plaats van andere workarounds te gebruiken.)