Android 9 (poziom 28 interfejsu API) i nowsze wersje obsługują grupy gotowości aplikacji. Koszty Czuwania aplikacji pomagają systemowi określać priorytety żądań zasobów przez aplikacje na podstawie tego, jak niedawno i jak często są one używane. Na podstawie wzorców korzystania z aplikacji każda z nich jest umieszczana w jednym z 5 koszyków priorytetowych. System ogranicza zasoby urządzenia dostępne dla każdej aplikacji w zależności od tego, do której grupy należy aplikacja.
Zasobniki priorytetowe
System dynamicznie przypisuje każdą aplikację do zasobnika priorytetów i w razie potrzeby zmienia przypisanie. System może korzystać z wstępnie załadowanej aplikacji, która używa uczenia maszynowego do określania prawdopodobieństwa użycia każdej aplikacji i przypisywania aplikacji do odpowiednich kategorii.
Jeśli aplikacja systemowa nie jest obecna na urządzeniu, system domyślnie sortuje aplikacje na podstawie tego, jak niedawno były używane. Aplikacje, które są bardziej aktywne, są przypisywane do zasobników o wyższym priorytecie, co sprawia, że mają do dyspozycji więcej zasobów systemowych. W szczególności zasobnik określa, jak często uruchamiane są zadania aplikacji i jak często może ona wywoływać alarmy. Te ograniczenia obowiązują tylko wtedy, gdy urządzenie jest zasilane z baterii. Gdy urządzenie się ładuje, system nie nakłada tych ograniczeń.
Są to:
- Aktywna: aplikacja jest używana lub była używana bardzo niedawno.
- Zestaw roboczy: aplikacja jest regularnie używana.
- Często: aplikacja jest często używana, ale nie codziennie.
- Rzadko: aplikacja nie jest często używana.
- Ograniczona: aplikacja zużywa dużo zasobów systemowych lub może wykazywać niepożądane działanie.
Oprócz tych kategorii priorytetowych istnieje specjalna kategoria nigdy dla aplikacji, które są zainstalowane, ale nigdy nie zostały uruchomione. System nakłada na te aplikacje poważne ograniczenia.
Poniższe opisy dotyczą przypadku niepredykcyjnego. Natomiast gdy prognoza wykorzystuje uczenie maszynowe do przewidywania zachowań, przedziały są wybierane z wyprzedzeniem, w oczekiwaniu na kolejne działania użytkownika, a nie na podstawie ostatniego użycia. Na przykład ostatnio używana aplikacja może trafić do rzadko używanych, ponieważ uczenie maszynowe przewiduje, że nie będzie ona używana przez kilka godzin.
Aktywne
Aplikacja znajduje się w grupie aktywnych, gdy jest używana, była używana niedawno lub gdy wykonuje jedną z tych czynności:
- Uruchamia aktywność.
- Uruchamia długotrwałą usługę na pierwszym planie.
- Użytkownik kliknie ją w powiadomieniu.
Jeśli aplikacja znajduje się w aktywnym zasobniku, system nakłada na jej zadania lub alarmy minimalne ograniczenia:
- Od Androida 16 (poziom API 36) zadania w tle mają duży limit czasu działania, jeśli są uruchamiane przez aplikację w aktywnym zasobniku.
Obejmuje to zadania zaplanowane bezpośrednio w
JobScheduler
, a także zadania utworzone przez inne biblioteki, takie jak WorkManager czyDownloadManager
.
Interakcja użytkownika oznacza aplikacje jako aktywne
Na Androidzie 9 (API na poziomie 28) i nowszych, gdy użytkownik wchodzi w interakcje z aplikacją w określony sposób, system tymczasowo umieszcza ją w aktywnym zasobniku. Gdy użytkownik przestanie korzystać z aplikacji, system umieści ją w odpowiednim koszyku na podstawie historii użytkowania.
Oto przykłady interakcji, które wywołują takie działanie systemu:
Użytkownik klika powiadomienie wysłane przez Twoją aplikację.
Użytkownik wchodzi w interakcję z usługą działającą na pierwszym planie w aplikacji, klikając przycisk multimediów.
Użytkownik łączy się z aplikacją podczas interakcji z Androidem Automotive OS, w którym aplikacja korzysta z usługi na pierwszym planie lub
CONNECTION_TYPE_PROJECTION
.
Zestaw roboczy
Aplikacja znajduje się w grupie zestawu roboczego, jeśli jest często uruchamiana, ale nie jest aktywna. Na przykład aplikacja społecznościowa, którą użytkownik uruchamia niemal codziennie, prawdopodobnie będzie należeć do zestawu roboczego. Aplikacje są też przenoszone do zasobnika zestawu roboczego, jeśli są używane pośrednio.
Jeśli aplikacja znajduje się w zestawie roboczym, system nakłada na nią niewielkie ograniczenia dotyczące możliwości uruchamiania zadań i wywoływania alarmów. Więcej informacji znajdziesz w sekcji Limity zasobów w zarządzaniu energią.
Częste
Aplikacja należy do kategorii często używanych, jeśli jest używana regularnie, ale niekoniecznie codziennie. Na przykład aplikacja do śledzenia treningów, z której użytkownik korzysta na siłowni, może należeć do kategorii „często używane”.
Jeśli aplikacja znajduje się w grupie częstych, system nakłada na nią większe ograniczenia dotyczące możliwości uruchamiania zadań i wywoływania alarmów. Więcej informacji znajdziesz w sekcji Limity zasobów w zarządzaniu energią.
Rzadkie
Aplikacja znajduje się w grupie rzadko używanych, jeśli nie jest często używana. Na przykład aplikacja hotelowa, z której użytkownik korzysta tylko podczas pobytu w danym hotelu, może należeć do kategorii rzadko używanych.
Jeśli aplikacja znajduje się w rzadko używanych, system nakłada ścisłe ograniczenia na jej możliwość wykonywania zadań i uruchamiania alarmów. System ogranicza też możliwość łączenia się aplikacji z internetem. Więcej informacji znajdziesz w sekcji Limity zasobów w zarządzaniu energią.
Z ograniczonym dostępem
Ten zasobnik, dodany w Androidzie 12 (poziom API 31), ma najniższy priorytet i największe ograniczenia ze wszystkich zasobników. System bierze pod uwagę zachowanie aplikacji, np. częstotliwość interakcji użytkownika z nią, aby zdecydować, czy umieścić ją w grupie ograniczonej.
Na Androidzie 13 (API na poziomie 33) i nowszym, o ile Twoja aplikacja nie kwalifikuje się do wyjątku, system umieszcza ją w ograniczonym zasobniku w tych sytuacjach:
Użytkownik nie wchodzi w interakcję z aplikacją przez określoną liczbę dni. W przypadku Androida 12 (poziom 31 interfejsu API) i 12L (poziom 32 interfejsu API) liczba dni wynosi 45. W Androidzie 13 liczba dni została zmniejszona do 8.
Aplikacja wywołuje zbyt dużą liczbę broadcastów lub powiązań w ciągu 24 godzin.
Jeśli system umieści Twoją aplikację w zasobniku z ograniczeniami, będą obowiązywać te ograniczenia:
- Zadania możesz uruchamiać raz dziennie w 10-minutowej sesji zbiorczej. Podczas tej sesji system grupuje zadania aplikacji z zadaniami innych aplikacji.
- Zadania z ograniczeniami nie są uruchamiane automatycznie. W tym samym czasie musi być uruchomione lub oczekiwać co najmniej 1 inne zadanie, które może być dowolnym innym zadaniem.
- Aplikacja może uruchamiać mniej zadań przyspieszonych niż wtedy, gdy system umieszcza ją w mniej restrykcyjnej kategorii.
- Aplikacja może wywołać 1 alarm dziennie. Może to być dokładny alarm lub niedokładny alarm.
Wyjątki dotyczące zasobnika z ograniczeniami
Następujące typy aplikacji są zwolnione z konieczności umieszczania ich w grupie ograniczonej i pomijają wyzwalacz nieaktywności, nawet na Androidzie 12 i nowszym:
- Aplikacje na urządzenia towarzyszące
- Aplikacje działające na urządzeniu w trybie demonstracyjnym
- Aplikacje właściciela urządzenia
- Aplikacje właściciela profilu
- Trwałe aplikacje
- Aplikacje VPN
- Aplikacje z rolą
ROLE_DIALER
- Aplikacje, które użytkownik wyraźnie wskazał w ustawieniach systemu jako te, które mają zapewniać „nieograniczoną” funkcjonalność.
- Aplikacje z aktywnymi widżetami
- Aplikacje, które mają co najmniej jedno z tych uprawnień:
Ocena zasobu o wysokim priorytecie
Aby sprawdzić, do którego zasobnika przypisana jest Twoja aplikacja, wykonaj jedną z tych czynności:
Zadzwoń pod numer
getAppStandbyBucket()
.Wykonaj to polecenie w oknie terminala:
adb shell am get-standby-bucket PACKAGE_NAME
System ogranicza działanie aplikacji, gdy znajduje się ona w zasobniku stanu gotowości aplikacji, którego wartość jest większa niż STANDBY_BUCKET_ACTIVE
(10).
Sprawdzone metody
Jeśli Twoja aplikacja jest zgodna ze sprawdzonymi metodami dotyczącymi trybu uśpienia i gotowości aplikacji, późniejsze funkcje zarządzania energią nie będą trudne. Jednak niektóre zachowania aplikacji, które wcześniej działały dobrze, mogą powodować problemy.
- Nie próbuj manipulować systemem, aby umieścić aplikację w określonej kategorii. Metoda ustalania priorytetów przez system może się zmieniać, a każdy producent urządzenia może napisać własną aplikację do podziału na grupy z własnym algorytmem. Zamiast tego upewnij się, że aplikacja działa prawidłowo niezależnie od tego, do której grupy należy.
- Jeśli aplikacja nie ma aktywności uruchamiającej, może nigdy nie zostać przeniesiona do aktywnego zasobnika. Rozważ przeprojektowanie aplikacji, aby zawierała taką aktywność.
Jeśli użytkownicy nie mogą wchodzić w interakcje z powiadomieniami aplikacji, nie będą mogli aktywować promocji aplikacji do aktywnego koszyka. W takim przypadku rozważ przeprojektowanie niektórych powiadomień, które umożliwiają użytkownikom interakcję. Niektóre wytyczne znajdziesz w artykule Wzorce projektowania powiadomień w Material Design.
Jeśli aplikacja nie wyświetli powiadomienia po otrzymaniu wiadomości o wysokim priorytecie z Komunikacji w chmurze Firebase (FCM), użytkownik nie będzie mógł wejść z nią w interakcję, a tym samym przenieść jej do aktywnego segmentu. W rzeczywistości jedynym zamierzonym zastosowaniem wiadomości FCM o wysokim priorytecie jest wysyłanie powiadomień do użytkownika, więc taka sytuacja nie powinna mieć miejsca. W przypadku Androida 12L (poziom API 32) i starszych wersji, jeśli nieprawidłowo oznaczysz wiadomość FCM jako o wysokim priorytecie, mimo że nie wywołuje ona interakcji użytkownika, może to spowodować obniżenie priorytetu przyszłych wiadomości.
Jeśli aplikacje są podzielone na kilka pakietów, mogą one znajdować się w różnych grupach i mieć różne poziomy dostępu. Testuj te aplikacje z pakietami przypisanymi do różnych segmentów, aby mieć pewność, że działają prawidłowo.