System priorytetowo traktuje żądania aplikacji o zasoby na podstawie stanu urządzenia, stanu aplikacji i poziomu czuwania aplikacji.
System Android może egzekwować limity zasobów na 2 sposoby. Jednym ze sposobów na zoptymalizowanie wykorzystania zasobów jest odroczenie wykonania zadania do czasu, gdy urządzenie opuści stan niskiego zużycia energii, np. tryb Doze. Na przykład regularne zadania i nieprecyzyjne alarmy są opóźniane, aby zostały wykonane po wyjściu urządzenia z trybu uśpienia.
Innym sposobem jest ograniczenie możliwości uruchamiania urządzenia przez aplikację i wykonywania przez nią pracy na podstawie bieżącego zasobu w trybie gotowości. System może zmniejszyć zarówno częstotliwość (jak często aplikacja wybudza urządzenie), jak i łączny czas (czas, przez jaki urządzenie pozostaje aktywne). Jeśli na przykład aplikacja znajduje się w grupie rzadko używanych aplikacji, może wykonywać zaplanowane zadania przez łączny czas 10 minut w ciągu 24 godzin.
Pamiętaj, że WorkManager używa JobSchedulera do planowania zadań, gdy aplikacja jest niewidoczna, a workery są więc objęci limitami zasobów zadań.
Więcej informacji o ograniczeniach znajdziesz w tych artykułach:
- Limity zasobów na podstawie stanu urządzenia
- Limity zasobów na podstawie stanu aplikacji
- Limity zasobów na podstawie puli aplikacji w stanie gotowości
Pamiętaj, że stan urządzenia i aplikacji może zastąpić limity dotyczące puli aplikacji w stanie gotowości. Jeśli np. urządzenie jest ładowane, system zezwala aplikacjom w grupie rzadko używania w stanie gotowości na wykonywanie zadań przez ponad 10 minut w ciągu 24 godzin.
Wystąpiły zmiany zachowania, które również wpłynęły na limity zasobów. Więcej informacji znajdziesz w artykule Zmiany w zachowaniu Androida, które wpływają na limity zasobów.
Limity zasobów na podstawie stanu urządzenia
System może też zwolnić z ograniczeń dotyczących zasobów lub narzucić je w zależności od stanu urządzenia. Na przykład urządzenie w stanie ładowania ma nieograniczony dostęp do zasobów niezależnie od tego, do której grupy w trybie gotowości należy aplikacja.
| Stan urządzenia | Praca | Alarmy | Dostęp do sieci | Firebase Cloud Messaging | 
| Ładowanie | Brak limitów wykonań z wyjątkiem zasobnika w trybie gotowości ograniczonego | Brak limitów wykonywania dla wszystkich puli w stanie gotowości i stanów procesu, z wyjątkiem sytuacji, gdy użytkownik ręcznie ograniczy zużycie baterii przez aplikację. | Brak ograniczeń | Brak ograniczeń | 
| Ekran włączony | Limity wykonania są egzekwowane na podstawie zasobnika rezerwowego. | Limity wykonywania są egzekwowane na podstawie procesu aplikacji i zasobnika w stanie gotowości. | Dostęp zależy od zasobnika w stanie gotowości lub stanu procesu aplikacji | Brak ograniczeń | 
| Wyłączony ekran i tryb Doze | Limity wykonywania są egzekwowane na podstawie zasobnika w trybie gotowości, a wykonanie jest odkładane do okna konserwacji doze | Limity wykonania są egzekwowane na podstawie zasobnika rezerwowego. Zwykłe alarmy: odroczone do okresu konserwacji trybu DND Alarmy podczas bezczynności: ograniczone do 7 na godzinę | Ograniczenia podczas trybu oszczędzania baterii | Wysoki priorytet: brak limitów wykonań Priorytet normalny: opóźnione do okresu konserwacji trybu uśpienia | 
Limity zasobów na podstawie stanu aplikacji
To, czy system wymusza limity zasobów w przypadku aplikacji w stanie gotowości, zależy od znaczenia procesu aplikacji. Aby poznać różne poziomy ważności procesów, zapoznaj się z artykułem ActivityManager.RunningAppProcessInfo.importance.
Użytkownik urządzenia może też ręcznie zastąpić optymalizacje zarządzania energią aplikacji, co zastąpi limity w przypadku aplikacji w stanie gotowości.
| Stan aplikacji | Praca | Alarmy | Sieć | 
| proces aplikacji jest widoczny lub znajduje się na pierwszym planie; | Brak limitów wykonań | Brak limitów częstotliwości | Brak ograniczeń | 
| proces aplikacji uruchamia usługę na pierwszym planie, | Limity wykonania są egzekwowane na podstawie zasobnika rezerwowego*** | Ograniczenia częstotliwości są egzekwowane na podstawie puli rezerwowej. | Brak ograniczeń | 
| Użytkownik ręcznie ogranicza zużycie baterii przez aplikację | Wykonanie jest ograniczone | Wykonanie jest ograniczone | Dostęp zależy od zachowania zasobnika w trybie gotowości | 
| Użytkownik ręcznie odblokowuje dostęp do baterii aplikacji | Limit wykonań jest duży*** | Brak limitów wykonań | Nieograniczony, chyba że urządzenie jest w trybie oszczędzania danych | 
*** Zachowanie limitu wykonania zadań zmieniło się w Androidzie 16. Przed Androidem 16 nie było limitu wykonywania, gdy aplikacja uruchamiała usługę na pierwszym planie lub użytkownik nie ograniczał zużycia baterii przez aplikację.
Limity zasobów na podstawie zasobnika aplikacji w trybie gotowości
Uwaga: wartości w tej tabeli nie gwarantują czasu wykonania, ponieważ inne warunki urządzenia lub zmiany w grupach mogą wpływać na ograniczenia zasobów. Wartości te mogą się też zmienić w kolejnych wersjach Androida.
Zwykłe zadania, przyspieszone zadania, alarmy i dostęp do sieci mogą być ograniczone na podstawie zasobnika aplikacji w stanie gotowości. Zapoznaj się z zależnymi od aplikacji zasobnikami w trybie gotowości i stosuj się do tych przybliżonych ograniczeń zarządzania energią. Aby uzyskać optymalną wydajność, stosuj się do sprawdzonych metod dotyczących trybu gotowości aplikacji i optymalizuj zużycie baterii w przypadku interfejsów API do planowania zadań.
Pamiętaj, że od Androida 13 grupa w stanie gotowości aplikacji nie określa już, ile wiadomości FCM o wysokiej priorytecie może używać aplikacja.
| Zasobnik czuwania aplikacji | zwykłe zadania* | Zadania priorytetowe** | Alarmy | Sieć | 
| Aktywne: | Do 20 minut w ciągu 60-minutowego okresu*** | Do 30 minut w ciągu 24 godzin*** | Brak limitów wykonań | Brak ograniczeń | 
| Zestaw roboczy: | Do 10 minut w ciągu 4 godzin | Do 15 minut w ciągu 24 godzin | Ograniczona do 10 na godzinę | Brak ograniczeń | 
| Często: | Do 10 minut w ciągu 12 godzin | Do 10 minut w ciągu 24 godzin | Ograniczona do 2 na godzinę | Brak ograniczeń | 
| Rzadkie: | Do 10 minut w ciągu 24 godzin | Do 10 minut w ciągu 24 godzin | Maksymalna liczba to 1 na godzinę. | Wyłączony | 
| Ograniczony dostęp: | Raz dziennie przez maksymalnie 10 minut | Do 5 minut w ciągu 24 godzin | 1 alarm dziennie: alarm precyzyjny lub alarm nieprecyzyjny. | Wyłączony | 
* Zwykłe zadania to zadania, które nie używają flag setUserInitiated(true) ani setExpedited(true) w JobScheduler lub przyspieszonych wątków w WorkManager.
** Zadania przyspieszone mają osobny limit wykonania niż zadania zwykłe. Można je skonfigurować w WorkManagerze tak, aby kontynuowały działanie z wykorzystaniem limitów wykonania zwykłych zadań, gdy limity zadań przyspieszonych zostaną wyczerpane.
*** Zachowanie limitu wykonania zadań zmieniło się w Androidzie 16. Przed Androidem 16 nie było limitu wykonywania, gdy aplikacja była w grupie aktywnego trybu gotowości.
Zmiany zachowania Androida, które wpływają na limity zasobów
W ramach tych aktualizacji Androida wprowadzono zmiany w limitach zasobów aplikacji.
Android 16
Zmiana zachowania optymalizacji limitu zasobów JobScheduler
Android dopasował limit czasu wykonywania zadań wykonywanych w trybie zwykłym i przyspieszonym na podstawie tych czynników:
- W którym zbiorze aplikacji w stanie gotowości znajduje się aplikacja
- Jeśli zadanie rozpocznie wykonywanie, gdy aplikacja jest w stanie najwyższym
- Jeśli zadanie jest wykonywane podczas działania usługi na pierwszym planie
Android 13
- Zasoby w trybie gotowości aplikacji nie określają już, ile priorytetowych usług FCM może używać aplikacja.
- System obniża teraz priorytet wiadomości, jeśli wykryje, że aplikacja wysyła wiadomości o wysokim priorytecie, które nie powodują wyświetlenia powiadomienia.
- Aktualne wytyczne dotyczące wiadomości o wysokim priorytecie znajdziesz w dokumentacji usługi Firebase na temat ustawiania priorytetu wiadomości i zarządzania nim.
Android 9
Wprowadzamy funkcję grup czuwania aplikacji
Android 9 wprowadza nową funkcję zarządzania baterią, czyli grupy w trybie gotowości aplikacji. Zasoby w stanach gotowości pomagają systemowi ustalać priorytety żądań zasobów przez aplikacje na podstawie tego, jak często i jak ostatnio były używane. Na podstawie wzorców korzystania z aplikacji każda z nich jest umieszczana w jednym z 5 segmentów priorytetowych. System ogranicza zasoby urządzenia dostępne dla każdej aplikacji na podstawie tego, do której grupy należy aplikacja.
