Zarządzanie zasilaniem

Android 9 (poziom interfejsu API 28) wprowadza nowe funkcje, które usprawniają zarządzanie energią urządzenia. Te zmiany, wraz z funkcjami, które były już dostępne w poprzednich wersjach, pomagają zapewnić, że zasoby systemowe będą dostępne najbardziej dla aplikacji, które ich najbardziej potrzebują.

Funkcje zarządzania energią dzielą się na 2 kategorie:

Zasobniki gotowości aplikacji
System ogranicza dostęp aplikacji do zasobów urządzenia, takich jak procesor czy bateria, na podstawie wzorców korzystania przez użytkownika. To jest nowa funkcja w Androidzie 9.
Ulepszenia w zakresie oszczędzania baterii
Gdy oszczędzanie baterii jest włączone, system nakłada ograniczenia na wszystkie aplikacje. To istniejąca funkcja, która została ulepszona w Androidzie 9.

Zasobniki gotowości aplikacji

W Androidzie 9 wprowadzamy nową funkcję zarządzania baterią – Zasobniki czuwania aplikacji. Zasobniki gotowości aplikacji pomagają systemowi ustalać priorytety żądań aplikacji dotyczących zasobów na podstawie tego, jak dawno i jak często były używane. Na podstawie wzorców wykorzystania aplikacji każda aplikacja jest umieszczana w jednym z 5 grup priorytetowych. System ogranicza zasoby urządzenia dostępne dla każdej aplikacji w zależności od tego, w którym zasobniku znajduje się aplikacja.

5 grup nadaje priorytet aplikacjom na podstawie tych kryteriów:

Aktywny

Aplikacja znajduje się w aktywnym zasobniku, jeśli użytkownik obecnie z niej korzysta. Na przykład:

  • Aplikacja uruchomiła aktywność
  • Aplikacja działa jako usługa na pierwszym planie
  • Aplikacja ma adapter synchronizacji powiązany z dostawcą treści używanym przez aplikację na pierwszym planie.
  • Użytkownik klika powiadomienie w aplikacji

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

Zestaw roboczy

Aplikacja znajduje się w zasobniku zestawu roboczego, jeśli jest często uruchamiana, ale obecnie nie jest aktywna. Na przykład aplikacja społecznościowa, którą użytkownik uruchamia przez większość dni, prawdopodobnie będzie w fazie pracy. 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 artykule Ograniczenia dotyczące zarządzania zasilaniem.

Częste

Aplikacja znajduje się w częściowym zasobniku, 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 zasobniku częstego, system nakłada silniejsze ograniczenia na jej zdolność uruchamiania zadań i aktywowania alarmów, a także nakłada ograniczenia na wiadomości o wysokim priorytecie. Więcej informacji znajdziesz w artykule Ograniczenia dotyczące zarządzania zasilaniem.

Rzadko

Aplikacja znajduje się w rzadkim zasobniku, jeśli nie jest często używana. Na przykład aplikacja hotelowa, która jest uruchamiana przez użytkownika tylko podczas pobytu w tym hotelu, może się znajdować w rzadkim zasobniku.

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

Nigdy

Aplikacje, które zostały zainstalowane, ale nigdy nie zostały uruchomione, są przypisywane do zasobnika „Nigdy”. System nakłada na te aplikacje poważne ograniczenia.

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 wykorzystuje systemy uczące się, aby określić prawdopodobieństwo użycia każdej aplikacji i przypisuje ją do odpowiednich zasobników. Jeśli na urządzeniu nie ma aplikacji systemowej, system domyślnie sortuje aplikacje na podstawie tego, kiedy były ostatnio używane. Więcej aktywnych aplikacji jest przypisywane do zasobników, które dają tym aplikacjom wyższy priorytet, przez co udostępnia im więcej zasobów systemowych. W szczególności zasobnik określa, jak często są uruchamiane zadania aplikacji, jak często aplikacja może wywoływać alarmy oraz jak często aplikacja może otrzymywać wiadomości Firebase Cloud Messaging (FCM) o wysokim priorytecie. Ograniczenia te obowiązują tylko wtedy, gdy urządzenie jest zasilane z baterii. System nie nakłada ich na aplikacje, gdy urządzenie się ładuje.

Każdy producent może ustawić własne kryteria przypisywania nieaktywnych aplikacji do zasobników. Nie próbuj wpływać na to, do którego zasobnika zostanie przypisana Twoja aplikacja. Zamiast tego skup się na dbaniu o to, aby aplikacja działała dobrze w każdym zasobniku, w którym się znajduje. Aplikacja może sprawdzić, w jakim zasobniku się obecnie znajduje, wywołując nową metodę UsageStatsManager.getAppStandbyBucket().

Sprawdzone metody

Jeśli Twoja aplikacja jest już zgodna ze sprawdzonymi metodami uśpienia i czuwania aplikacji, obsługa nowych funkcji zarządzania energią nie powinna być trudna. Jednak niektóre działania aplikacji, które wcześniej działały dobrze, mogą teraz powodować problemy.

  • Nie próbuj ingerować w system, aby umieścić aplikację w jednym lub drugim zasobniku. Metody systemu mogą się zmieniać, a każdy producent urządzenia może napisać własną aplikację do podziału na segmenty za pomocą własnego algorytmu. 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 Menu z aplikacjami, może nigdy nie zostać awansowana do aktywnego zasobnika. Możesz przeprojektować aplikację, by miała taką funkcję.
  • Jeśli powiadomienia aplikacji nie są aktywne, użytkownicy nie mogą aktywować aplikacji do promowania w aktywnym zasobniku przez interakcję z powiadomieniami. W takiej sytuacji możesz zmodyfikować niektóre powiadomienia, tak aby użytkownicy mogli na nie odpowiadać. Aby dowiedzieć się więcej, przeczytaj o wzorcach projektowych powiadomień w interfejsie Material Design.
  • I podobnie, jeśli po otrzymaniu wiadomości FCM o wysokim priorytecie aplikacja nie wyświetli powiadomienia, nie pozwoli użytkownikowi na interakcję z aplikacją, więc awansuje ją do aktywnego zasobnika. W praktyce jedynym przeznaczeniem wiadomości o wysokim priorytecie w FCM jest przesłanie powiadomienia do użytkownika, więc taka sytuacja nigdy nie powinna mieć miejsca. Niewłaściwie oznaczysz wiadomość w FCM jako o wysokim priorytecie, gdy nie wywoła ona interakcji z użytkownikiem, może to mieć inne negatywne konsekwencje. Na przykład może to spowodować wyczerpanie limitu przez aplikację, co sprawi, że wiadomości FCM będą traktowane jak wiadomości o normalnym priorytecie.

    Uwaga: jeśli użytkownik wielokrotnie zamyka powiadomienie, system umożliwia mu zablokowanie go w przyszłości. Nie wysyłaj do użytkowników spamu powiadomień, tylko po to, żeby spróbować utrzymać aplikację w aktywnym zasobniku.

  • Jeśli aplikacje są podzielone na wiele pakietów, mogą one znajdować się w różnych zasobnikach i tym samym mieć różne poziomy dostępu. Pamiętaj, aby przetestować takie aplikacje za pomocą pakietów przypisanych do różnych zasobników, aby mieć pewność, że będą działać prawidłowo.

Ulepszone oszczędzanie baterii

Android 9 zawiera szereg udoskonaleń trybu oszczędzania baterii. Dokładne ograniczenia nałożone przez producenta urządzenia są uzależnione od jego producenta. Na przykład w kompilacjach AOSP system stosuje te ograniczenia:

  • System bardziej agresywnie przełącza aplikacje w tryb gotowości, zamiast czekać na ich bezczynności.
  • Limity wykonywania w tle dotyczą wszystkich aplikacji, niezależnie od ich docelowego poziomu interfejsu API.
  • Usługi lokalizacyjne mogą być wyłączone przy wyłączonym ekranie.
  • Aplikacje w tle nie mają dostępu do sieci.

Dostępne są też inne optymalizacje energii dostosowane do konkretnych urządzeń. Szczegółowe informacje znajdziesz na stronie z opisem ograniczeń zarządzania energią.

Zawsze warto przetestować aplikację przy włączonym oszczędzaniu baterii. Oszczędzanie baterii możesz włączyć ręcznie na ekranie urządzenia, klikając Ustawienia > Oszczędzanie baterii.

Testowanie i rozwiązywanie problemów

Nowe funkcje zarządzania energią mają wpływ na wszystkie aplikacje na urządzeniach z Androidem 9, niezależnie od tego, czy są one kierowane na ten system. Ważne jest, aby upewnić się, że aplikacja działa prawidłowo na tych urządzeniach.

Pamiętaj, aby przetestować główne zastosowania aplikacji w różnych warunkach, aby zobaczyć, jak funkcje zarządzania energią współdziałają ze sobą. Za pomocą poleceń Android Debug Bridge możesz włączać i wyłączać niektóre funkcje.

Polecenia Android Debug Bridge

Za pomocą poleceń powłoki Android Debug Bridge możesz przetestować kilka funkcji zarządzania energią.

Informacje o tym, jak przy użyciu ADB przełączyć urządzenie w tryb uśpienia, znajdziesz w artykule o testowaniu w trybie uśpienia i czuwania przy użyciu aplikacji.

Zasobniki gotowości aplikacji

Za pomocą ADB możesz ręcznie przypisać aplikację do zasobnika gotowości aplikacji. Aby zmienić zasobnik aplikacji, użyj tego polecenia:

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

Za pomocą tego polecenia możesz też ustawić wiele pakietów jednocześnie:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

Aby sprawdzić, w jakim zasobniku znajduje się aplikacja, uruchom polecenie

$ adb shell am get-standby-bucket [packagename]

Jeśli nie przekażesz parametru packagename, polecenie wyświetli zasobniki wszystkich aplikacji. Aplikacja może też poznać swój zasobnik w czasie działania, wywołując nową metodę UsageStatsManager.getAppStandbyBucket().

Oszczędzanie baterii

Istnieje kilka poleceń, które pozwalają sprawdzić działanie aplikacji w warunkach o małej mocy.

Aby zasymulować odłączenie urządzenia, użyj polecenia

$ adb shell dumpsys battery unplug

Aby sprawdzić działanie urządzenia w warunkach niskiego zużycia energii, użyj tego polecenia:

$ adb shell settings put global low_power 1

Po zakończeniu testowania możesz cofnąć ręczne ustawienia urządzenia, używając tego polecenia:

$ adb shell dumpsys battery reset