Sobes.tech
Intern

Aký je rozdiel medzi službou na pozadí a službou na pozadí v Android?

sobes.tech AI

Odpoveď od AI

Rozdiel medzi bežným pozadovým servisom a obmedzeným (restricted) servisom sa objavil od Androidu 8.0 (API 26).

Bežný pozdný servis:

  • Môže pracovať neobmedzený čas v pozadí.
  • Systém ho môže ukončiť pri nedostatku zdrojov, ale môže byť znovu spustený, ak je v onStartCommand() vrátené START_STICKY.
  • Nevyžaduje od používateľa viditeľné oznámenie (hoci to nie je najlepšia prax z hľadiska UX).
  • Môže spotrebovať značné zdroje batérie a CPU.

Obmedzený pozdný servis (platia obmedzenia):

  • Služba spustená v pozadí bez viditeľných aktivít alebo iných "bielych zoznamov" (privilegované podmienky) čelí obmedzeniam na využívanie zdrojov.
  • Hlavné obmedzenia zahŕňajú:
    • Obmedzenie práce v pozadí: Služba môže byť systémom zastavená po krátkom čase (zvyčajne niekoľko minútach) po prechode aplikácie do pozadia.
    • Zákaz spúšťania nových pozadových služieb: Pozadová aplikácia nemôže spúšťať nové pozadové služby pomocou startService(). Namiesto toho by mala použiť JobScheduler alebo WorkManager.
    • Obmedzenie prijímania broadcast správ: Nepriame broadcast správy (implicit broadcasts) v manifeste budú ignorované. Aplikácia by mala výslovne registrovať príjemcov broadcast správ alebo použiť JobScheduler/WorkManager na spracovanie udalostí.
  • Cieľom týchto obmedzení je zlepšiť výdrž batérie a výkon zariadenia, obmedzovaním neracionálneho využívania zdrojov pozadím aplikácií.

Ako sa servis stáva neobmedzeným (aktívnym v očiach systému):

  • Aplikácia je na poprednom pláne (používateľ s ňou aktívne interaguje).
  • Aplikácia spúšťa viditeľný servis (foreground service), ktorý zobrazuje trvalé oznámenie používateľovi.
  • Aplikácia vykonáva určité úlohy (napríklad spracovanie broadcast správ, vykonávanie úloh JobScheduler), ktoré dočasne vyvedú aplikáciu zo stavu úplnej iracionálnej pozadí práce.

Hlavný rozdiel: Od Androidu 8.0 a vyšších verzií bude obmedzený systémom servis pracujúci v pozadí bez viditeľnej aktivity používateľa alebo viditeľného servisu. Bežný "pozadový servis" pred Androidom 8.0 mohol pracovať bez takýchto prísnych obmedzení.