Når en app kører i baggrunden, bruger den nogle af enhedens begrænsede ressourcer, f.eks. RAM. Dette kan resultere i en forringet brugeroplevelse, især hvis brugeren bruger en ressourcekrævende app, som f.eks. spiller et spil eller ser video. For at forbedre brugeroplevelsen har Android 8.0 (API-niveau 26) indført begrænsninger for, hvad apps kan gøre, mens de kører i baggrunden. Dette dokument beskriver ændringerne i styresystemet, og hvordan du kan opdatere din app, så den fungerer godt under de nye begrænsninger.

Hvad er tjenesten i android?

Lad os først genopfriske, hvad tjenesten er i Android? Ifølge android-dokumentationen:

En Service er en applikationskomponent, der kan udføre langvarige operationer i baggrunden, og den giver ikke en brugergrænseflade.

Så grundlæggende er service det samme som aktivitet, men den har ikke brugergrænsefladekomponenten i sig. Så den behøver ikke at udføre jævn animation ved 60 fps. Derfor kan den køre udføre enhver opgave i længere tid end aktiviteten.

Der er tre typer af tjenesten:

  • Startet tjeneste – En tjeneste startes, når en programkomponent (f.eks. en aktivitet) kalder startService().
  • Bundet tjeneste – En tjeneste er bundet, når en programkomponent binder sig til den ved at kalde bindService().
  • Planlagt tjeneste – En tjeneste er planlagt, når et API, f.eks. JobScheduler.

Baggrunds- vs. forgrundsprogrammer:

For at lære ændringer i baggrundsudførelsen skal vi først kende forskellen mellem baggrunds- og forgrundsprogrammer.

Tommelfingerregel: Din applikation betragtes som en forgrundstjeneste, hvis et af nedenstående tre tilfælde er sandt:

  1. Din applikation har i øjeblikket synlig aktivitet.
  2. Din applikation har en forgrundstjeneste kørende.
  3. Din applikation er forbundet med en anden forgrundsapplikation ved at binde tjenesten eller ved at forbruge deres indholdsleverandører.

Hvis et af ovenstående scenarier ikke er sandt i det aktuelle tilfælde, anses dit program for at være i baggrunden.

Hvorfor skal vi begrænse brugen af baggrundstjenester?

Når dine programmer kører i baggrunden ved hjælp af tjenester, bruger dit program to værdifulde ressourcer: 1) hukommelse og 2) batteri.

Disse to er begrænsede ressourcer på mobile enheder, og de fleste lav- og mellemklasseenheder har ikke masser af hukommelse eller batteri.

Såfremt din applikation udfører nogle meget intensive opgaver i baggrunden og bruger en større mængde RAM til at udføre denne opgave, vil dette skabe en meget uhensigtsmæssig brugeroplevelse, især hvis brugeren bruger en anden ressourcekrævende app, f.eks. et spil eller ser en video i forgrunden.

Som i dokumentationen for den startede tjeneste er den bedste praksis,

Når operationen er afsluttet, bør tjenesten stoppe sig selv.

Men mange applikationer har langvarigt kørende baggrundstjenester, som dybest set kører i uendelig tid for enten at opretholde socketforbindelsen med serveren eller overvåge nogle opgaver eller brugeraktivitet. Disse tjenester skaber batteridræn, og de bruger også konstant hukommelse.

Fra de seneste par udgivelser af Android (startende fra Marshmallow) forsøger Google meget hårdt at øge batterilevetiden og reducere hukommelsesforbruget, som programmerne bruger, ved at indføre doze-tilstand og app-standby ved at forsinke baggrundsudførelsen med et vist tidsrum, hvis telefonen er inaktiv.

Men for det meste bruger udviklerne dem stadig, selv om de kender ulemperne ved de langløbende tjenester. (For det meste fordi det er let at implementere og vedligeholde i stedet for at bruge andre løsninger.)