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.