Android 9 (poziom API 28) i nowsze obsługują zasobniki czuwania aplikacji. Czuwanie aplikacji Zasobniki pomagają systemowi ustalać priorytety żądań aplikacji dotyczących zasobów na podstawie tego, jak niedawno i jak często aplikacje są używane. Na podstawie wzorców korzystania z aplikacji każda z nich jest umieszczana w jednym z 5 zasobników priorytetów. System ogranicza zasoby urządzenia dostępne dla każdej aplikacji na podstawie zasobnika, w którym się ona znajduje.
Zasobniki priorytetów
System dynamicznie przypisuje każdą aplikację do zasobnika priorytetów i w razie potrzeby zmienia to przypisanie. System może korzystać z wstępnie załadowanej aplikacji, która wykorzystuje uczenie maszynowe do określania prawdopodobieństwa użycia każdej aplikacji i przypisuje aplikacje do odpowiednich zasobników.
Jeśli na urządzeniu nie ma aplikacji systemowej, system domyślnie sortuje aplikacje według daty ostatniego użycia. Aplikacje, które są bardziej aktywne, są przypisywane do zasobników, które dają im wyższy priorytet, dzięki czemu mają dostęp do większej ilości zasobów systemowych. W szczególności zasobnik określa, jak często są uruchamiane zadania aplikacji i jak często aplikacja może 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ń.
Dostępne są te grupy priorytetów:
- Aktywna: aplikacja jest używana lub była używana bardzo niedawno.
- Zestaw roboczy: aplikacja jest regularnie używana.
- Często: aplikacja jest używana często, ale nie codziennie.
- Rzadka: 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 zasobników priorytetów istnieje specjalny zasobnik 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 bez prognozowania. Z kolei gdy prognoza wykorzystuje uczenie maszynowe do przewidywania zachowań, zasobniki są wybierane na podstawie przewidywanych kolejnych działań użytkownika, a nie na podstawie ostatniego użycia. Na przykład niedawno używana aplikacja może trafić do zasobnika rzadko używanych, ponieważ uczenie maszynowe przewiduje, że nie będzie ona używana przez kilka godzin.
Aktywne
Aplikacja znajduje się w zasobniku aktywnych, gdy jest używana, była używana bardzo niedawno lub gdy wykonuje dowolną z tych czynności:
- Uruchamia aktywność.
- Uruchamia długo działającą usługę na pierwszym planie.
- użytkownik kliknie powiadomienie,
Jeśli aplikacja znajduje się w zasobniku aktywnym, system nakłada minimalne ograniczenia na jej zadania lub alarmy:
- 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 za pomocą
JobScheduler, a także zadania utworzone przez inne biblioteki, takie jak WorkManager czyDownloadManager.
Interakcja użytkownika przypisuje aplikacje jako aktywne
Na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym, gdy użytkownik wchodzi w interakcję z aplikacją w określony sposób, system tymczasowo umieszcza aplikację w zasobniku aktywnym. Gdy użytkownik przestanie korzystać z aplikacji, system umieści ją w zasobniku na podstawie historii użytkowania.
Oto przykłady interakcji, które wywołują to 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 Twojej aplikacji, klikając przycisk multimediów.
Użytkownik łączy się z Twoją aplikacją podczas interakcji z systemem operacyjnym Android Automotive, w którym aplikacja używa usługi na pierwszym planie lub
CONNECTION_TYPE_PROJECTION.
Zestaw roboczy
Aplikacja znajduje się w zasobniku Zestaw roboczy, jeśli jest często uruchamiana, ale nie jest aktywna. Na przykład aplikacja społecznościowa, którą użytkownik uruchamia prawie codziennie, prawdopodobnie będzie w zbiorze roboczym. 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 łagodne ograniczenia na jej zdolność do uruchamiania zadań i wywoływania alarmów. Więcej informacji znajdziesz w sekcji Limity zasobów zarządzania energią.
Częste
Aplikacja znajduje się w zasobniku często, jeśli jest używana regularnie, ale niekoniecznie codziennie. Na przykład aplikacja do śledzenia treningów, którą użytkownik uruchamia na siłowni, może znajdować się w zasobniku częstego użycia.
Jeśli aplikacja znajduje się w zasobniku „Często”, system nakłada większe ograniczenia na jej możliwość uruchamiania zadań i wywoływania alarmów. Więcej informacji znajdziesz w artykule o limitach zasobów zarządzania energią.
Rzadkie
Aplikacja jest w zasobniku rzadko, jeśli nie jest często używana. Na przykład aplikacja hotelowa, którą użytkownik uruchamia tylko podczas pobytu w hotelu, może znajdować się w zasobniku rzadko używanych aplikacji.
Jeśli aplikacja znajduje się w zasobniku „rzadko”, system nakłada ścisłe ograniczenia na jej możliwość uruchamiania zadań i wywoływania alarmów. System ogranicza też możliwość łączenia się aplikacji z internetem. Więcej informacji znajdziesz w artykule o limitach zasobów zarządzania energią.
Ograniczony dostęp
Ten zasobnik, dodany w Androidzie 12 (poziom interfejsu API 31), ma najniższy priorytet i największe ograniczenia ze wszystkich zasobników. System bierze pod uwagę zachowanie aplikacji, np. to, jak często użytkownik wchodzi z nią w interakcję, aby zdecydować, czy umieścić ją w zasobniku z ograniczeniami.
Na Androidzie 13 (API na poziomie 33) i nowszych, jeśli Twoja aplikacja nie kwalifikuje się do wyjątku, system umieszcza ją w zasobniku z ograniczeniami w tych sytuacjach:
Użytkownik nie wchodzi w interakcję z Twoją aplikacją przez określoną liczbę dni. Na Androidzie 12 (poziom API 31) i 12L (poziom API 32) liczba dni wynosi 45. Android 13 skraca ten czas do 8 dni.
Aplikacja wywołuje nadmierną liczbę transmisji lub powiązań w ciągu 24 godzin.
Jeśli system umieści aplikację w zasobniku z ograniczeniami, będą obowiązywać te ograniczenia:
- Możesz uruchamiać zadania raz dziennie w 10-minutowej sesji zbiorczej. Podczas tej sesji system grupuje zadania Twojej aplikacji z zadaniami innych aplikacji.
- Zadania z ograniczeniami nie uruchamiają się same. W tym samym czasie musi być uruchomione lub oczekiwać co najmniej 1 inne zadanie, które może być dowolnym innym zadaniem.
- Twoja aplikacja może uruchamiać mniej zadań priorytetowych niż wtedy, gdy system umieszcza ją w mniej restrykcyjnym zasobniku.
- Aplikacja może wywołać 1 alarm dziennie. Może to być alarm precyzyjny lub alarm nieprecyzyjny.
Wyjątki od ograniczonego zasobnika
Te typy aplikacji są wyłączone z zasobnika ograniczonego i nie podlegają regule nieaktywności, nawet na Androidzie 12 i nowszych wersjach:
- 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
- Aplikacje trwałe
- aplikacje VPN,
- aplikacje, które mają rolę
ROLE_DIALER; - aplikacje, które użytkownik wyraźnie oznaczył w ustawieniach systemowych jako „nieograniczone”;
- aplikacje z aktywnymi widżetami,
- aplikacje, które mają co najmniej jedno z tych uprawnień:
Ocena grupy priorytetowej
Aby sprawdzić, do którego zasobnika jest przypisana aplikacja, wykonaj jedną z tych czynności:
Zadzwoń pod numer
getAppStandbyBucket().Wykonaj poniższe polecenie w oknie terminala:
adb shell am get-standby-bucket PACKAGE_NAME
System ogranicza działanie aplikacji, gdy jest ona umieszczona w zasobniku czuwania 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 czuwania aplikacji, późniejsze funkcje zarządzania energią nie będą trudne. Jednak niektóre zachowania aplikacji, które wcześniej działały prawidłowo, mogą powodować problemy.
- Nie próbuj manipulować systemem, aby umieścić aplikację w określonym zasobniku. Metoda ustalania priorytetów przez system może się zmieniać, a każdy producent urządzenia może napisać własną aplikację do grupowania z własnym algorytmem. Zamiast tego upewnij się, że aplikacja działa prawidłowo niezależnie od tego, w którym zasobniku się znajduje.
- Jeśli aplikacja nie ma aktywności programu uruchamiającego, może nigdy nie zostać przeniesiona do aktywnego zasobnika. Rozważ zmianę projektu aplikacji, aby zawierała taką aktywność.
Jeśli użytkownicy nie mogą wchodzić w interakcje z powiadomieniami aplikacji, nie mogą też wywołać przeniesienia aplikacji do zasobnika aktywnego. W takim przypadku rozważ zmianę wyglądu niektórych powiadomień, które umożliwiają użytkownikom interakcję. Wskazówki znajdziesz we wzorcach projektowych powiadomień w Material Design.
Jeśli aplikacja nie wyświetla powiadomienia po otrzymaniu wiadomości z
RemoteNotificationKomunikacji w chmurze Firebase (FCM), użytkownik nie może wejść z nią w interakcję i przenieść jej do zasobnika aktywnego. W rzeczywistości jedynym zamierzonym zastosowaniemRemoteNotificationjest wysyłanie powiadomień do użytkownika, więc taka sytuacja nie powinna mieć miejsca. W przypadku tych typów wiadomości obowiązuje zasada egzekwowania: 20-sekundowe okno wykonywania, po którym następuje powrót do pierwotnego powiadomienia. Jeśli aplikacja działa na pierwszym planie lub użytkownik zezwala na działanie w tle, nie stosujemy żadnych środków egzekwowania zasad.Jeśli aplikacje są podzielone na kilka pakietów, mogą one znajdować się w różnych zasobnikach i mieć różne poziomy dostępu. Przetestuj te aplikacje z pakietami przypisanymi do różnych zasobników, aby upewnić się, że aplikacja działa prawidłowo.