Zasobniki gotowości aplikacji

Android 9 (poziom interfejsu API 28) i nowsze obsługują zasobniki gotowości aplikacji. Zasobniki gotowości aplikacji pomagają systemowi ustalać priorytety żądań aplikacji dotyczących zasobów na podstawie ich ostatniego użycia i częstotliwości ich używania. Na podstawie wzorców wykorzystania aplikacji każda aplikacja jest umieszczana w 1 z 5 zasobników priorytetowych. System ogranicza zasoby urządzenia dostępne dla każdej aplikacji w zależności od tego, w którym zasobniku się znajduje.

Zasobniki priorytetowe

System dynamicznie przypisuje każdą aplikację do zasobnika priorytetowego i w razie potrzeby zmienia przypisanie. System może używać wstępnie wczytanej aplikacji, która korzysta z systemów uczących się, aby określić prawdopodobieństwo użycia poszczególnych aplikacji i przypisuje je do odpowiednich zasobników.

Jeśli na urządzeniu nie ma aplikacji systemowej, system domyślnie sortuje aplikacje na podstawie tego, jak dawno były używane. Bardziej aktywne aplikacje są przypisywane do zasobników o wyższym priorytecie, dzięki czemu aplikacja ma więcej zasobów systemowych. W szczególności zasobnik określa, jak często są uruchamiane zadania aplikacji i jak często aplikacja może aktywować alarmy. Te ograniczenia obowiązują tylko wtedy, gdy urządzenie jest zasilane z baterii. Podczas ładowania urządzenia system nie nakłada tych ograniczeń.

Priorytety są następujące:

  • Aktywna: aplikacja jest używana lub była używana niedawno.
  • Zestaw roboczy: aplikacja jest regularnie używana.
  • Częste: aplikacja jest często używana, ale nie codziennie.
  • Rzadka: aplikacja nie jest często używana.
  • Z ograniczeniami: aplikacja zużywa dużo zasobów systemowych lub może działać w niepożądany sposób.

Oprócz tych zasobników priorytetowych istnieje specjalny zasobnik nigdy dla aplikacji, które zostały zainstalowane, ale nigdy nie zostały uruchomione. System nakłada na te aplikacje poważne ograniczenia.

Poniższe opisy odnoszą się do przypadku nieprzewidywanego. Z kolei gdy prognoza wykorzystuje systemy uczące się do prognozowania zachowań, zasobniki są wybierane w taki sposób, aby przewidywać kolejne działania użytkownika, a nie na podstawie niedawnego użycia. Na przykład ostatnio używana aplikacja może trafić do tego rzadkiego zasobnika, ponieważ systemy uczące się przewidują, że może być ona nieużywana przez kilka godzin.

Aktywny

Aplikacja znajduje się w zasobniku aktywnym, gdy jest używana, bardzo niedawno lub wykonywana w dowolnym z tych warunków:

  • Uruchamia aktywność.
  • Uruchamia długo działającą usługę na pierwszym planie.
  • Kliknięte przez użytkownika z poziomu powiadomienia.

Jeśli aplikacja znajduje się w aktywnym zasobniku, system nie nakłada żadnych ograniczeń na zadania ani alarmy tej aplikacji.

W wyniku interakcji użytkownika aplikacje są przypisywane jako aktywne

Na Androidzie 9 (poziom interfejsu API 28) i nowszych, gdy użytkownik wejdzie w interakcję z aplikacją w określony sposób, system tymczasowo umieszcza aplikację w aktywnym zasobniku. Gdy użytkownik przestanie korzystać z aplikacji, system umieszcza ją w zasobniku na podstawie historii korzystania.

Oto przykłady interakcji, które wywołują to działanie systemu:

  • Użytkownik klika powiadomienie wysłane przez aplikację.

  • Użytkownik wchodzi w interakcję z usługą na pierwszym planie w aplikacji, klikając przycisk multimediów.

  • Użytkownik łączy się z aplikacją podczas interakcji z systemem operacyjnym Android Automotive, gdy aplikacja korzysta z usługi na pierwszym planie lub CONNECTION_TYPE_PROJECTION.

Zestaw roboczy

Aplikacja znajduje się w zasobniku zestawu roboczego, jeśli jest często uruchamiana, ale nie jest aktywna. Na przykład aplikacja do mediów społecznościowych, którą użytkownik uruchamia niemal codziennie, prawdopodobnie będzie częścią środowiska roboczego. Aplikacje są też awansowane do zasobnika zestawu roboczego, jeśli są używane pośrednio.

Jeśli aplikacja znajduje się w działaniu, system nakłada niewielkie ograniczenia na możliwość uruchamiania zadań i aktywowania alarmów. Więcej informacji znajdziesz w sekcji Ograniczenia dotyczące zarządzania zasilaniem.

Częste

Aplikacja znajduje się w zasobniku często, jeśli jest używana regularnie, ale niekoniecznie codziennie. Na przykład w zasobniku często znajduje się aplikacja do śledzenia treningów, którą użytkownik uruchamia na siłowni.

Jeśli aplikacja znajduje się w takim zasobniku, system nakłada silniejsze ograniczenia na jej możliwość uruchamiania zadań i aktywowania alarmów. Więcej informacji znajdziesz w sekcji Ograniczenia dotyczące zarządzania zasilaniem.

Rzadko

Aplikacja znajduje się w grupie rzadkich, jeśli nie jest często używana. Na przykład aplikacja hotelowa, którą użytkownik uruchomi tylko podczas pobytu w tym hotelu, może się znaleźć w rzadkim zasobniku.

Jeśli aplikacja znajduje się w rzadkim zasobniku, system nakłada ścisłe ograniczenia na możliwość uruchamiania zadań i aktywowania alarmów. System ogranicza też możliwość łączenia aplikacji z internetem. Więcej informacji znajdziesz w sekcji Ograniczenia dotyczące zarządzania zasilaniem.

Z ograniczeniem

Ten zasobnik dodany w Androidzie 12 (poziom interfejsu API 31) ma najniższy priorytet i najwyższe ograniczenia ze wszystkich zasobników. Aby zdecydować, czy umieścić aplikację w zasobniku z ograniczonym dostępem, system bierze pod uwagę zachowanie aplikacji, np. częstotliwość interakcji z nią.

W przypadku Androida 13 (poziom interfejsu API 33) i nowszych, o ile Twoja aplikacja nie kwalifikuje się do wykluczenia, system umieszcza ją w zasobniku z ograniczeniami w następujących sytuacjach:

  • Użytkownik nie korzysta z aplikacji przez określoną liczbę dni. W przypadku Androida 12 (poziom interfejsu API 31) i 12L (poziom API 32) liczba dni wynosi 45. Android 13 zmniejsza liczbę dni do 8 dni.

  • Aplikacja wywołuje nadmierną liczbę transmisji lub powiązań w ciągu 24 godzin.

Jeśli system umieszcza aplikację w zasobniku z ograniczonym dostępem, obowiązują te ograniczenia:

  • Możesz uruchamiać zadania raz dziennie w 10-minutowej sesji grupowej. Podczas tej sesji system grupuje zadania aplikacji z zadaniami innych aplikacji.
    • Zadania z ograniczeniami nie są uruchamiane samodzielnie. Musi być w tym samym czasie uruchomione lub oczekujące co najmniej 1 zadanie. Może ono zawierać dowolne inne zadanie.
  • Aplikacja może uruchamiać mniej przyspieszonych zadań w porównaniu z sytuacją, gdy system umieści ją w mniej restrykcyjnym zasobniku.
  • Aplikacja może wywoływać 1 alarm dziennie. Alarmem może być dokładny lub niedokładny alarm.

Wykluczenia z zasobnika objętego ograniczeniami

Te typy aplikacji są zwolnione z wchodzenia do zasobnika objętego ograniczeniami i pomijają aktywator braku aktywności, nawet na Androidzie 12 i nowszych:

Ocena zasobnika priorytetów

Aby sprawdzić, do którego zasobnika jest przypisana Twoja aplikacja, wykonaj jedną z tych czynności:

  • Zadzwoń pod numer getAppStandbyBucket().

  • Uruchom to polecenie w oknie terminala:

    adb shell am get-standby-bucket PACKAGE_NAME

System ogranicza szybkość aplikacji, gdy znajduje się ona w zasobniku gotowości aplikacji, którego wartość jest większa niż STANDBY_BUCKET_ACTIVE (10).

Sprawdzone metody

Jeśli Twoja aplikacja działa zgodnie ze sprawdzonymi metodami dotyczącymi funkcji Uśpienie i trybu czuwania, późniejsze funkcje zarządzania energią nie są trudne. Jednak niektóre działania aplikacji, które wcześniej działały dobrze, mogą powodować problemy.

  • Nie próbuj ingerować w system, aby umieścić aplikację w określonym zasobniku. Metoda nadawania priorytetów przez system może się zmienić, a każdy producent urządzenia może stworzyć własną aplikację do podziału na segmenty z własnym algorytmem. Zadbaj o to, aby działała ona 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ć awansowana do aktywnego zasobnika. Rozważ przeprojektowanie aplikacji, aby zawierała taką aktywność.
  • Jeśli użytkownicy nie mogą korzystać z powiadomień z aplikacji, nie mogą aktywować promocji aplikacji w aktywnym zasobniku. W takiej sytuacji warto zmodyfikować niektóre powiadomienia, które pozwolą użytkownikom na interakcję. Niektóre wskazówki znajdziesz w artykule o wzorcach projektowania powiadomień w interfejsie Material Design.

  • Jeśli po otrzymaniu wiadomości Komunikacji w chmurze Firebase o wysokim priorytecie (FCM) aplikacja nie wyświetli powiadomienia, użytkownik nie będzie mógł wchodzić z nią w interakcję, więc nie będzie mógł awansować jej do aktywnego zasobnika. W praktyce jedynym przeznaczeniem wiadomości o wysokim priorytecie w FCM jest wysłanie powiadomienia do użytkownika, więc taka sytuacja nie powinna mieć miejsca. W przypadku wersji 12L (poziom interfejsu API 32) i niższych, jeśli niewłaściwie oznaczysz wiadomość FCM jako wysoki priorytet, gdy nie wywołuje ona interakcji użytkownika, może to spowodować obniżenie priorytetu przyszłych wiadomości.

  • Jeśli aplikacje są podzielone na wiele pakietów, mogą one znajdować się w różnych zasobnikach i mieć różne poziomy dostępu. Przetestuj te aplikacje za pomocą pakietów przypisanych do różnych zasobników, aby sprawdzić, czy działa ona prawidłowo.