Sobes.tech
Intern

Jaka jest różnica między usługą w tle a usługą w tle w Androidzie?

sobes.tech AI

Odpowiedź od AI

Różnica między zwykłą usługą w tle a usługą w tle ograniczoną (restricted) pojawiła się wraz z Androidem 8.0 (API 26).

Zwykła usługa w tle:

  • Może działać nieograniczenie w tle.
  • System może ją zakończyć w przypadku braku zasobów, ale może być ponownie uruchomiona, jeśli w onStartCommand() zwrócono START_STICKY.
  • Nie wymaga widocznych powiadomień dla użytkownika (choć nie jest to najlepsza praktyka z punktu widzenia UX).
  • Może zużywać znaczne zasoby baterii i CPU.

Ograniczona usługa w tle (obowiązują ograniczenia):

  • Usługa uruchomiona w tle bez widocznych aktywności lub innych "list białych" (uprzywilejowanych warunków) napotyka na ograniczenia w korzystaniu z zasobów.
  • Główne ograniczenia obejmują:
    • Ograniczenie działania w tle: System może ją zatrzymać w krótkim czasie (zwykle kilka minut) po przejściu aplikacji w tryb tła.
    • Zakaz uruchamiania nowych usług w tle: Aplikacja w tle nie może uruchamiać nowych usług w tle za pomocą startService(). Zamiast tego powinna używać JobScheduler lub WorkManager.
    • Ograniczenie odbioru wiadomości broadcast: Niejawne broadcasty w manifeście będą ignorowane. Aplikacja musi jawnie rejestrować odbiorniki broadcast lub używać JobScheduler/WorkManager do obsługi zdarzeń.
  • Celem tych ograniczeń jest poprawa czasu pracy na baterii i wydajności urządzenia, ograniczając irracjonalne korzystanie z zasobów przez aplikacje w tle.

Jak usługa staje się nieograniczona (aktywny z punktu widzenia systemu):

  • Aplikacja znajduje się na pierwszym planie (użytkownik aktywnie z nią wchodzi w interakcję).
  • Aplikacja uruchamia widoczny serwis (foreground service), który wyświetla stałe powiadomienie użytkownikowi.
  • Aplikacja wykonuje określone zadania (np. obsługa wiadomości broadcast, wykonywanie zadań JobScheduler), które tymczasowo wyprowadzają ją z pełnego irracjonalnego stanu pracy w tle.

Główna różnica: Z Androidem 8.0 i nowszymi, serwis działający w tle bez widocznej aktywności użytkownika lub widocznego serwisu będzie ograniczony przez system pod względem dostępu do zasobów i możliwości długotrwałej pracy.