De fiecare dată când o aplicație rulează în fundal, aceasta consumă o parte din resursele limitate ale dispozitivului, cum ar fi memoria RAM. Acest lucru poate duce la o experiență de utilizare afectată, mai ales dacă utilizatorul folosește o aplicație care consumă multe resurse, cum ar fi un joc sau vizionarea unui videoclip. Pentru a îmbunătăți experiența utilizatorului, Android 8.0 (nivel API 26) impune limitări cu privire la ceea ce pot face aplicațiile în timp ce rulează în fundal. Acest document descrie modificările aduse sistemului de operare și modul în care vă puteți actualiza aplicația pentru a funcționa bine în condițiile noilor limitări.

Ce este serviciul în Android?

Să reîmprospătăm mai întâi ce este serviciul în Android? Conform documentației android:

Un Service este o componentă a aplicației care poate efectua operații de lungă durată în fundal și nu oferă o interfață cu utilizatorul.

Deci, în mod fundamental, serviciul este același lucru ca și activitatea, dar nu are componenta UI în ea. Așadar, nu trebuie să realizeze o animație lină la 60 fps. Acesta este motivul pentru care poate rula să execute orice sarcină pentru o perioadă mai lungă de timp decât activitatea.

Există trei tipuri de servicii:

  • Serviciu pornit – Un serviciu este pornit atunci când o componentă a aplicației (cum ar fi o activitate) apelează startService().
  • Serviciu legat – Un serviciu este legat atunci când o componentă a aplicației se leagă de el prin apelarea bindService().
  • Scheduled Service (Serviciu programat) – Un serviciu este programat atunci când o API, cum ar fi JobScheduler.

Aplicații de fundal vs. aplicații de prim-plan:

Pentru a învăța modificările de execuție în fundal, trebuie să cunoaștem mai întâi diferența dintre aplicația de fundal și cea de prim-plan.

Regula de bază, aplicația dvs. va fi considerată ca fiind un serviciu în prim-plan dacă oricare dintre cele trei cazuri de mai jos este adevărat:

  1. Aplicația dvs. are o activitate vizibilă în prezent.
  2. Aplicația dvs. are un serviciu în prim-plan care rulează.
  3. Aplicația dvs. este conectată la o altă aplicație în prim-plan prin legarea serviciului sau prin consumarea furnizorilor lor de conținut.

Dacă niciunul dintre scenariile de mai sus nu este adevărat în instanța curentă, se consideră că aplicația dvs. se află în fundal.

De ce trebuie să restricționăm utilizarea serviciilor din fundal?

De fiecare dată când aplicațiile dvs. rulează în fundal folosind servicii, aplicația dvs. consumă două resurse prețioase: 1) Memoria și 2) Bateria.

Aceste două sunt resurse limitate pe dispozitivele mobile și majoritatea dispozitivelor din gama joasă și medie nu au suficientă memorie sau baterie în interiorul lor.

Să presupunem că, în cazul în care aplicația dvs. execută unele sarcini foarte intensive în fundal și utilizează o cantitate mai mare de memorie RAM pentru a îndeplini această sarcină, atunci acest lucru va crea o experiență de utilizare foarte jalnică, mai ales dacă utilizatorul folosește o altă aplicație care utilizează resurse intensiv, cum ar fi un joc sau vizionarea unui videoclip în prim-plan.

Conform documentației pentru serviciul pornit, cea mai bună practică este,

Când operațiunea este finalizată, serviciul ar trebui să se oprească singur.

Dar, multe aplicații au servicii de fundal cu funcționare îndelungată, care practic rulează la infinit pentru a menține conexiunea socket cu serverul sau pentru a monitoriza anumite sarcini sau activități ale utilizatorului. Aceste servicii generează consum de baterie și, de asemenea, consumă în mod constant memorie.

De la ultimele două versiuni ale Android (începând cu Marshmallow), Google încearcă din răsputeri să crească durata de viață a bateriei și să reducă consumul de memorie utilizat de aplicații prin introducerea modului „doze” și a modului de așteptare a aplicațiilor prin întârzierea execuției în fundal cu o anumită perioadă de timp dacă telefonul este inactiv.

Dar, de cele mai multe ori, în ciuda cunoașterii dezavantajelor serviciilor cu funcționare îndelungată, dezvoltatorii continuă să le utilizeze. (Mai ales pentru că este ușor de implementat și de întreținut, mai degrabă decât să folosească alte soluții de rezolvare.)

.