Sobes.tech
Intern

Care este diferența dintre un serviciu de fundal și un serviciu de fundal în Android?

sobes.tech AI

Răspuns de la AI

Diferența dintre un serviciu normal de fundal și un serviciu restricționat (restricted) de fundal a apărut odată cu Android 8.0 (API 26).

Serviciu de fundal normal:

  • Poate funcționa nelimitat în fundal.
  • Sistemul îl poate opri din cauza lipsei de resurse, dar poate fi repornit dacă START_STICKY este returnat în onStartCommand().
  • Nu necesită notificări vizibile pentru utilizator (deși nu este cea mai bună practică din punct de vedere UX).
  • Poate consuma resurse semnificative de baterie și CPU.

Serviciu de fundal restricționat (se aplică restricții):

  • Un serviciu lansat în fundal fără activități vizibile sau alte "liste albe" (condiții privilegiate) se confruntă cu restricții în utilizarea resurselor.
  • Principalele restricții includ:
    • Restricție asupra funcționării în fundal: Sistemul poate opri serviciul în scurt timp (de obicei câteva minute) după ce aplicația trece în fundal.
    • Interdicție de a porni noi servicii de fundal: O aplicație în fundal nu poate porni noi servicii de fundal folosind startService(). În schimb, trebuie folosit JobScheduler sau WorkManager.
    • Restricție asupra primirii mesajelor broadcast: Mesajele broadcast implicite din manifest vor fi ignorate. Aplicația trebuie să înregistreze explicit receptori de broadcast sau să folosească JobScheduler/WorkManager pentru a gestiona evenimentele.
  • Scopul acestor restricții este de a îmbunătăți durata de viață a bateriei și performanța dispozitivului, limitând utilizarea irațională a resurselor de către aplicațiile de fundal.

Cum devine un serviciu nelimitat (activ din punctul de vedere al sistemului):

  • Aplicația se află în prim-plan (utilizatorul interacționează activ cu ea).
  • Aplicația pornește un serviciu vizibil (foreground service), care afișează o notificare constantă utilizatorului.
  • Aplicația îndeplinește anumite sarcini (de exemplu, procesarea mesajelor broadcast, executarea sarcinilor JobScheduler), care temporar o scot din starea complet irațională de lucru în fundal.

Diferența principală: Cu Android 8.0 și versiunile ulterioare, un serviciu care rulează în fundal fără activitate vizibilă a utilizatorului sau serviciu vizibil va fi limitat de sistem în ceea ce privește accesul la resurse și capacitatea de a funcționa pe termen lung.