Zarządzanie zasilaniem

Android 9 (poziom interfejsu API 28) wprowadza nowe funkcje, które ulepszają zarządzanie energią urządzenia. Te wraz z funkcjami, które były dostępne w poprzednich wersjach, co pozwala udostępniać zasoby systemowe tym aplikacjom, które ich najbardziej potrzebują.

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

Zasobniki gotowości aplikacji
System ogranicza działanie aplikacji dostęp do zasobów urządzenia, takich jak procesora lub baterii w zależności od wzorców użytkowania użytkownika. To jest nowa funkcja usługi Android 9.
Ulepszenia oszczędzania baterii
Gdy oszczędzanie baterii jest włączone, system nakłada ograniczenia na wszystkie aplikacje. Jest to istniejąca funkcja, poprawił się dzięki Androidowi 9.
.

Zasobniki gotowości aplikacji

W Androidzie 9 pojawiła się nowa funkcja zarządzania baterią – zasobniki gotowości aplikacji. Zasobniki gotowości aplikacji pomagają systemowi nadać priorytet aplikacjom żądań dotyczących zasobów na podstawie od czasu do czasu i częstotliwości używania aplikacji. Na podstawie danych o korzystaniu z aplikacji aplikacji, każda aplikacja jest umieszczona w jednym z 5 grup priorytetów. System ogranicza zasoby urządzenia dostępne dla każdej aplikacji na podstawie zasobnika, .

Aplikacje są podzielone na 5 grup według tych cech:

Aktywne

Aplikacja jest w aktywnym zasobniku, jeśli użytkownik obecnie z niej korzysta, przez przykład:

  • W aplikacji uruchomiono aktywność
  • Aplikacja uruchamia usługę na pierwszym planie
  • Aplikacja ma adapter synchronizacji powiązany z dostawcą treści używanym przez aplikacja na pierwszym planie
  • użytkownik klika powiadomienie w aplikacji,

Jeśli aplikacja znajduje się w aktywnym zasobniku, system nie nakłada żadnych ograniczeń z zadań, alarmów i wiadomości FCM.

Zestaw roboczy

Aplikacja znajduje się w zasobniku zestawu roboczego, jeśli działa często, ale nie jest w tej chwili aktywne. Na przykład aplikacja do mediów społecznościowych, którą użytkownik uruchamia najczęściej, którzy prawdopodobnie są w planach pracy. Aplikacje są również awansowane do grupy roboczej jeśli są używane pośrednio.

Jeśli aplikacja znajduje się w zestawie roboczym, system nakłada na nią niewielkie ograniczenia uruchamianie zadań i aktywowanie alarmów. Więcej informacji: Ograniczenia dotyczące zarządzania energią.

Częste

Aplikacja znajduje się w częstym zasobniku, jeśli jest używana regularnie, ale niekoniecznie zainteresowanych informacjami ze świata. Może to być na przykład aplikacja do monitorowania treningów, którą użytkownik biega na siłowni. może być w zasobniku częstego.

Jeśli aplikacja znajduje się w częstym zasobniku, system nakłada silniejsze ograniczenia na jego zdolność do uruchamiania zadań i uruchamiania alarmów, a także nakłada ograniczenia wiadomości w FCM o wysokim priorytecie. Więcej informacji: Ograniczenia dotyczące zarządzania energią.

Rzadkie

Aplikacja znajduje się w rzadkim zasobniku, jeśli nie jest często używana. Na przykład aplikacja hotelowa że użytkownik korzysta z niego tylko wtedy, gdy zatrzymuje się w danym hotelu, zasobnika.

Jeśli aplikacja znajduje się w rzadkim zasobniku, system nakłada ścisłe ograniczenia na jej 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. Dla: Więcej informacji znajdziesz w sekcji Ograniczenia dotyczące zarządzania energią.

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, a ponownie przypisuje aplikacje zgodnie z potrzebami. System może polegać na wstępnie załadowanej aplikacji, która używa komputera ustalające prawdopodobieństwo i przypisuje je do odpowiednich segmentów. Jeśli system aplikacji nie ma na urządzeniu, system domyślnie sortuje aplikacje na podstawie od kiedy były używane. Do zasobników, które są przypisane do bardziej aktywnych aplikacji nadanie aplikacjom wyższego priorytetu, więcej zasobów systemowych dostępnych dla aplikacji. Przede wszystkim zasobnik określa częstotliwość uruchamiania zadań w aplikacji oraz jak często może się ona aktywować; alarmy i częstotliwość, z jaką aplikacja może odbierać wiadomości o wysokim priorytecie w Firebase Cloud Wiadomości (FCM). Te ograniczenia mają zastosowanie tylko wtedy, gdy urządzenie jest zasilane z baterii. system nie nakłada tych ograniczeń na aplikacje podczas ładowania urządzenia.

Każdy producent może określić własne kryteria oceny nieaktywnych aplikacji przypisane do zasobników. Nie próbuj wpływać na to, do którego segmentu należy Twoja aplikacja przypisane do użytkownika. Zamiast tego skup się na zapewnieniu prawidłowego działania aplikacji w zasobniku, w którym może się ona znaleźć. Aplikacja może sprawdzić, w jakim zasobniku się aktualnie znajduje wywołanie nowej metody UsageStatsManager.getAppStandbyBucket()

Sprawdzone metody

Jeśli Twoja aplikacja stosuje już sprawdzone metody dotyczące uśpienie i tryb czuwania aplikacji, obsługa nowych funkcji zarządzania energią nie powinna być trudna. Pamiętaj jednak: niektóre zachowania aplikacji, które dotychczas działały dobrze, teraz mogą powodować problemy.

  • Nie próbuj manipulować systemem, aby umieścić aplikację w jednym zasobniku ani innego użytkownika. Systemowe metody grupowania mogą się zmieniać, a każde urządzenie producent może napisać własną aplikację do grupowania algorytmem bezpieczeństwa. Upewnij się, że aplikacja zachowuje się właściwie niezależnie od tego, do określonego zasobnika.
  • Jeśli aplikacja nie ma działania programu uruchamiającego, może nigdy nie zostać awansowana do aktywny zasobnik. Warto przeprojektować aplikację, aby miała tak działania.
  • Jeśli powiadomienia z aplikacji nie są aktywne, użytkownicy nie będą mogli aktywować powiadomień promowania aplikacji do aktywnego zasobnika przez interakcję z powiadomieniami. W W takiej sytuacji warto zmienić wygląd odpowiednich powiadomień, odpowiedź użytkownika. Niektóre wskazówki znajdziesz tutaj: Material Design wzoru powiadomień .
  • Podobnie, jeśli aplikacja nie wyświetli powiadomienia po otrzymaniu o wysokim priorytecie w FCM, nie daje użytkownikowi możliwości interakcji z aplikacją, więc nie dają jej możliwości aktywnego zasobnika. Jedynym zamierzonym zastosowaniem wiadomości FCM o wysokim priorytecie jest nie powinny wystąpić, gdy użytkownik zobaczy powiadomienie. Jeśli nieprawidłowo oznacza wiadomość FCM jako o wysokim priorytecie, gdy nie zostanie wysłana interakcje użytkownika mogą mieć inne negatywne konsekwencje, na przykład może spowodować wyczerpanie limitu przez aplikację, co jest bardzo pilne Wiadomości FCM będą traktowane jak wiadomości o normalnym priorytecie.

    Uwaga: jeśli użytkownik wielokrotnie odrzuci powiadomienie, system daje użytkownikowi możliwość zablokowania tego powiadomienia w przyszłości. Nie spamuj użytkownika powiadomieniami tylko po to, by aplikacja znalazła się w aktywny zasobnik!

  • Jeśli aplikacje są podzielone na kilka pakietów, mogą się one znajdować w różne zasobniki i tym samym różne poziomy dostępu. Należy pamiętać o testować takie aplikacje za pomocą pakietów przypisanych do różnych zasobników. działa prawidłowo.

Ulepszenia trybu oszczędzania baterii

W Androidzie 9 wprowadziliśmy szereg ulepszeń w trybie oszczędzania baterii. Dokładne ograniczenia nałożone na urządzenie określa producent urządzenia. Na przykład na stronie Przy kompilowaniu AOSP system stosuje te ograniczenia:

  • System intensywniej przełącza aplikacje w tryb gotowości, oczekiwanie na bezczynności aplikacji.
  • Limity wykonywania w tle dotyczą wszystkich aplikacji, niezależnie od docelowego interfejsu API na poziomie 300%.
  • 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 zasilania dostosowane do różnych urządzeń. Pełny Więcej informacji znajdziesz na stronie opisującej zarządzanie energią ograniczenia.

Jak zawsze, warto przetestować aplikację przy włączonym oszczędzaniu baterii. Ty Można ręcznie włączyć oszczędzanie baterii, wybierając na urządzeniu Ustawienia > Akumulatorowe Oszczędzanie.

Testowanie i rozwiązywanie problemów

Nowe funkcje zarządzania energią wpływają na wszystkie aplikacje działające na urządzeniach z Androidem 9, niezależnie od tego, albo nie są kierowane na Androida 9. Ważne jest, aby zapewnić prawidłowe działanie aplikacji na tych urządzeniach.

Przetestuj główne przypadki użycia w różnych warunkach, aby dowiedzieć się, współdziałania funkcji zarządzania energią. Możesz używać systemu Android Debug Bridge, aby włączyć niektóre włączania i wyłączania funkcji.

Polecenia narzędzia Android Debug Bridge

Możesz używać poleceń powłoki narzędzia Android Debug Bridge. aby przetestować kilka funkcji zarządzania energią.

Informacje o tym, jak za pomocą ADB uśpić urządzenie, znajdziesz: Testowanie z funkcjami Uśpienie i Czuwanie 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

Możesz też użyć tego polecenia, aby ustawić kilka pakietów naraz:

$ 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, w tym poleceniu pojawi się lista dla wszystkich aplikacji. Aplikacja może też znaleźć swój zasobnik w czasie działania, wywołując nowa metoda UsageStatsManager.getAppStandbyBucket()

Oszczędzanie baterii

Jest kilka poleceń, które pozwalają przetestować działanie aplikacji w warunkach niskiego zużycia energii.

Aby symulować odłączanie urządzenia, użyj polecenia

$ adb shell dumpsys battery unplug

Aby sprawdzić działanie urządzenia w warunkach słabego zasilania, użyj tego polecenia:

$ adb shell settings put global low_power 1

Po zakończeniu testowania możesz cofnąć ręczne ustawienia urządzenia tym poleceniem:

$ adb shell dumpsys battery reset