Kiedy aplikacja działa w tle, zużywa niektóre z ograniczonych zasobów urządzenia, takich jak pamięć RAM. Może to skutkować pogorszeniem doświadczenia użytkownika, zwłaszcza jeśli użytkownik korzysta z aplikacji wymagającej dużej ilości zasobów, np. gra lub ogląda wideo. Aby poprawić wrażenia użytkownika, system Android 8.0 (poziom API 26) nakłada ograniczenia na to, co mogą robić aplikacje działające w tle. Ten dokument opisuje zmiany w systemie operacyjnym oraz to, jak możesz zaktualizować swoją aplikację, aby działała dobrze w ramach nowych ograniczeń.

Czym jest usługa w androidzie?

Na początek odświeżmy, czym jest usługa w Androidzie? Zgodnie z dokumentacją androida:

A Service jest komponentem aplikacji, który może wykonywać długo trwające operacje w tle i nie zapewnia interfejsu użytkownika.

Więc, zasadniczo Usługa jest tym samym, co aktywność, ale nie ma w niej komponentu UI. Nie musi więc wykonywać płynnej animacji przy 60 fps. Dlatego może wykonywać dowolne zadanie przez dłuższy czas niż aktywność.

Istnieją trzy typy usług:

  • Usługa uruchomiona – Usługa jest uruchomiona, gdy komponent aplikacji (taki jak aktywność) wywołuje startService().
  • Usługa związana – Usługa jest związana, gdy komponent aplikacji wiąże się z nią przez wywołanie bindService().
  • Scheduled Service – Usługa jest zaplanowana, gdy interfejs API, taki jak JobScheduler.

Background vs Foreground applications:

Aby nauczyć się zmian w wykonywaniu w tle, musimy najpierw poznać różnicę między aplikacją tła i pierwszego planu.

Rzecz kciuka, Twoja aplikacja będzie uważana za usługę pierwszego planu, jeśli którykolwiek z poniższych trzech przypadków jest prawdziwy:

  1. Twoja aplikacja ma aktualnie widoczną aktywność.
  2. Twoja aplikacja ma uruchomioną usługę pierwszego planu.
  3. Twoja aplikacja jest połączona z inną aplikacją pierwszego planu poprzez wiązanie usługi lub konsumowanie ich dostawców treści.

Jeśli którykolwiek z powyższych scenariuszy nie jest prawdziwy w bieżącej instancji, twoja aplikacja jest uważana za działającą w tle.

Dlaczego musimy ograniczyć korzystanie z usług tła?

Gdy twoje aplikacje działają w tle przy użyciu usług, twoja aplikacja zużywa dwa cenne zasoby: 1) Pamięć i 2) Bateria.

Te dwa zasoby są ograniczone na urządzeniach mobilnych, a większość urządzeń niskiej i średniej klasy nie posiada dużej ilości pamięci lub baterii wewnątrz nich.

Przypuśćmy, że jeśli twoja aplikacja wykonuje jakieś bardzo intensywne zadania w tle i używa większej ilości pamięci RAM do wykonania tego zadania, to stworzy to bardzo śmieciowe doświadczenie użytkownika, zwłaszcza jeśli użytkownik używa innej zasobochłonnej aplikacji, takiej jak gra lub oglądanie wideo na pierwszym planie.

Według dokumentacji dla uruchomionej usługi najlepszą praktyką jest,

Gdy operacja jest zakończona, usługa powinna się zatrzymać.

Ale wiele aplikacji ma długo działające usługi tła, które w zasadzie działają przez nieskończony czas, aby albo utrzymać połączenie gniazda z serwerem lub monitorować niektóre zadania lub aktywność użytkownika. Usługi te powodują drenaż baterii, a także stale zużywają pamięć.

Od ostatnich kilku wydań androida (Począwszy od Marshmallow), Google bardzo stara się zwiększyć żywotność baterii i zmniejszyć zużycie pamięci przez aplikacje poprzez wprowadzenie trybu doze i czuwania aplikacji poprzez opóźnienie wykonania w tle przez pewien czas, jeśli telefon jest bezczynny.

Ale większość czasu pomimo znajomości minusów długo działających usług deweloperzy nadal ich używają. (Głównie dlatego, że jest to łatwe do wdrożenia i utrzymania niż korzystanie z innych obejść.)

.