Optymalizuj pod kątem funkcji uśpienia i czuwania aplikacji

Android ma 2 funkcje oszczędzania energii, które pozwalają wydłużyć czas pracy na baterii o zarządzanie zachowaniem aplikacji, gdy urządzenie nie jest podłączone do źródła zasilania: Uśpienie i tryb czuwania aplikacji. Uśpienie zmniejsza zużycie baterii przez odroczenie aktywność procesora w tle i aktywność sieci dla aplikacji, gdy urządzenie jest długo nieużywane określonych okresów. Czuwanie aplikacji opóźnia aktywność sieciową w tle przez aplikacje bez niedawnej aktywności użytkownika.

Gdy urządzenie jest w trybie uśpienia, dostęp do niektórych usług zużywających dużo energii zasoby są odroczone do okresu konserwacji. Konkretne ograniczenia są wymienione w Zarządzanie zasilaniem ograniczenia.

Uśpienie i tryb gotowości aplikacji zarządzają działaniem wszystkich aplikacji działających na Androidzie 6.0 lub wyższym, niezależnie od tego, czy są one kierowane konkretnie na poziom API 23. Aby zapewnić użytkownikom najlepsze wrażenia, przetestuj aplikację za pomocą funkcji Uśpienie i Aplikacja. w trybie gotowości i w razie potrzeby wprowadzić niezbędne zmiany w kodzie. Poniżej zawierają szczegółowe informacje.

Na czym polega uśpienie

Jeśli użytkownik pozostawi urządzenie odłączone i nie rusza się przez określony czas, Gdy ekran zostanie wyłączony, urządzenie przejdzie w tryb uśpienia. W trybie uśpienia system próbuje aby oszczędzać baterię, ograniczając działanie aplikacji dostęp do sieci i dużej mocy procesora usług Google. Uniemożliwia też aplikacjom dostęp do sieci i opóźnia zadań, synchronizacji i alarmów standardowych.

Okresowo system na chwilę wyłącza tryb uśpienia, aby umożliwić działanie aplikacji. odroczoną aktywność. W trakcie tego okresu konserwacji system uruchamia wszystkie oczekujące synchronizacje, zadania i alarmy oraz umożliwia aplikacjom dostęp do sieci.

Rysunek 1. Uśpienie zapewnia cykliczny okres konserwacji dla do korzystania z sieci i obsługi oczekujących działań.

Po zakończeniu okresu konserwacji system ponownie przejdzie w tryb uśpienia, zawieszania dostępu do sieci oraz odroczenia zadań, synchronizacji i alarmów. Z czasem system rzadziej planuje okresy konserwacji, co pomaga oszczędzać baterię zużycie energii w przypadku dłuższego braku aktywności, gdy urządzenie się nie ładuje.

Gdy użytkownik wybudzi urządzenie, przesuwając je, włączając ekran lub podłączenie ładowarki, system zamyka tryb uśpienia i wszystkie aplikacje wracają do normy działania.

Ograniczenia dotyczące uśpienia

W trybie uśpienia system stosuje do aplikacji te ograniczenia:

Lista kontrolna uśpienia

Dostosowywanie aplikacji do funkcji Uśpienie

Uśpienie może różnie wpływać na działanie aplikacji w zależności od oferowanych funkcji. i używanych przez nie usług. Wiele aplikacji działa normalnie w trybie uśpienia bez modyfikacji. Czasem trzeba zoptymalizować sposób, w jaki aplikacja zarządza siecią, alarmami, zadaniami i synchronizacją. Aplikacje muszą wydajnie i zarządzać działaniami w każdym okresie konserwacji.

Aby ułatwić sobie planowanie alarmów, możesz użyć 2 opcji AlarmManager metody: setAndAllowWhileIdle() i setExactAndAllowWhileIdle() Dzięki tym metodom możesz ustawiać alarmy uruchamianych nawet wtedy, gdy urządzenie jest uśpione.

Ograniczenie uśpienia dostępu do sieci może też mieć wpływ na Twoją aplikację, zwłaszcza jeśli aplikacja obsługuje wiadomości w czasie rzeczywistym, takie jak łaskotki powiadomienia. Jeśli aplikacja wymaga stałego połączenia z siecią, do odbierania wiadomości, użyj Komunikacji w chmurze Firebase (FCM), jeśli jak to tylko możliwe.

Aby sprawdzić, czy aplikacja działa zgodnie z oczekiwaniami, możesz użyć polecenia Polecenia adb, które wymuszają w systemie włączenie i zamknięcie funkcji Uśpienie i obserwować zachowanie aplikacji. Więcej informacji: Testowanie za pomocą funkcji Uśpienie i Czuwanie aplikacji

Informacje o trybie czuwania aplikacji

Tryb czuwania aplikacji pozwala systemowi określić, czy aplikacja jest bezczynna, gdy użytkownik nie jest aktywny podczas używania aplikacji. System określa to, czy użytkownik nie dotknij aplikacji przez określony czas, bez żadnego z poniższych warunków dotyczy:

  • Użytkownik samodzielnie uruchamia aplikację.
  • Aplikacja ma proces obecnie na pierwszym planie jako działanie lub usługi na pierwszym planie albo w użyciu przez inną aktywność lub usługę na pierwszym planie.
  • Aplikacja wygeneruje powiadomienie, które użytkownicy zobaczą na ekranie blokady lub w aplikacji na pasku powiadomień.

Gdy użytkownik podłącza urządzenie do zasilania, system publikuje aplikacje w stanie gotowości, dzięki czemu może on swobodnie korzystać z sieci i wykonywać oczekujących zadań i synchronizacji. Jeśli urządzenie jest długo nieaktywne, umożliwia nieaktywnym aplikacjom dostęp do sieci mniej więcej raz dziennie.

Korzystaj z FCM, aby korzystać z aplikacji, gdy urządzenie jest bezczynne

Chmura Firebase Messaging (FCM) to usługa działająca między chmurą, która umożliwia obsługę wiadomości w czasie rzeczywistym w ramach przesyłania wiadomości między usługami backendu i aplikacjami na urządzeniach z Androidem. Menedżer Społeczności zapewnia pojedyncze, trwałe połączenie z chmurą. Wszystkie aplikacje wymagające wiadomości w czasie rzeczywistym mogą udostępniać to połączenie. To współdzielone połączenie znacznie optymalizuje zużycie baterii, eliminując konieczność wielu aplikacji pod kątem utrzymywania własnych, oddzielnych trwałych połączeń, gwałtowne rozładowywanie baterii. Jeśli aplikacja wymaga wysyłania wiadomości, z usługą backendu, zdecydowanie zalecamy korzystanie z FCM, jest to możliwe, zamiast utrzymywania własnego stałego połączenia sieciowego.

FCM jest zoptymalizowane do pracy z trybami uśpienia i czuwania aplikacji. Menedżer Społeczności wiadomości o wysokim priorytecie pozwalają wybudzić aplikację, aby zaangażować użytkownika. Uśpienie lub aplikacja w trybie gotowości, system dostarcza wiadomość i przyznaje aplikacji tymczasowy dostęp; do usług sieciowych i częściowych blokad uśpienia, a następnie zwraca urządzenie lub aplikację stanie bezczynności. W przypadku pilnych powiadomień widocznych dla użytkowników rozważ wybranie wysokiej wiadomości priorytetowe, aby umożliwić ich dostarczanie w trybie uśpienia. Wiadomości o wysokim priorytecie mogą powodują wyświetlanie powiadomień. Zobacz Funkcja FCM wskazówek na temat wiadomości o wysokim priorytecie.

W przypadku wiadomości, które nie powodują otrzymywania powiadomień, np. zapisywania zawartości aplikacji aktualizowanie w tle lub inicjowanie synchronizacji danych, używaj normalnego priorytetu FCM. wiadomości. Wiadomości o normalnym priorytecie są dostarczane natychmiast, jeśli urządzenie nie w trybie Uśpienie. Jeśli urządzenie jest w trybie uśpienia, są dostarczane okresowo. Uśpienie okresu konserwacji lub od razu po wybudzeniu urządzenia przez użytkownika.

Ogólnie rzecz biorąc, jeśli Twoja aplikacja wymaga wysyłania wiadomości do klienta, użyj FCM. Jeśli Twoja aplikacja korzysta już z FCM, upewnij się, że używa wiadomości o wysokim priorytecie. tylko w przypadku wiadomości, które powodują wyświetlenie powiadomień dla użytkowników.

Pomoc do innych zastosowań

Prawie wszystkie aplikacje obsługują uśpienie, zarządzając połączeniami sieciowymi. alarmów, zadań i synchronizacji oraz za pomocą wiadomości FCM. Dla wąskiego grona zastosowań przypadków, może to być niewystarczające. W takich przypadkach system zapewnia konfigurowalna lista aplikacji, które są częściowo zwolnione z funkcji Uśpienie i Czuwanie aplikacji i optymalizacji.

Aplikacja, która jest częściowo wykluczona, może korzystać z sieci i wstrzymywać częściowe wybudzanie blokady w trybie uśpienia i czuwania aplikacji. Nadal jednak obowiązują inne ograniczenia do aplikacji, tak jak w przypadku innych aplikacji. Na przykład: zadania i synchronizacje aplikacji są odroczone na poziomie API 23 i niższym oraz AlarmManager alarmów się nie włącza. Aplikacja może sprawdzić, czy obecnie na liście zwolnień, wywołując isIgnoringBatteryOptimizations()

Użytkownicy mogą ręcznie skonfigurować listę wykluczonych aplikacji w Ustawieniach > Bateria > Optymalizacja baterii. System może również umożliwia aplikacjom proszenie użytkowników o zwolnienie z obowiązku spełniania wymogów tych zasad:

Aplikacja może sprawdzić, czy znajduje się na liście wykluczeń, wywołując isIgnoringBatteryOptimizations()

Testowanie za pomocą funkcji Uśpienie i Czuwanie aplikacji

Aby zadbać o wygodę użytkowników, przetestuj aplikację w trybie Uśpienie i tryb czuwania aplikacji.

Testowanie aplikacji za pomocą funkcji Uśpienie

Aby przetestować tryb uśpienia, wykonaj te czynności:

  1. Konfigurowanie urządzenia lub urządzenia wirtualnego z Androidem 6.0 (interfejs API) na poziomie 23) lub wyższym.
  2. Podłącz urządzenie do komputera, na którym pracujesz, i zainstaluj aplikację.
  3. Uruchom aplikację i pozostaw ją aktywną.
  4. Wymuś tryb bezczynności systemu, uruchamiając następujące polecenie:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Gdy wszystko będzie gotowe, wyjdź z trybu bezczynności, uruchamiając to polecenie:
        $ adb shell dumpsys deviceidle unforce
        
  6. Ponownie aktywuj urządzenie, wykonując to polecenie:
        $ adb shell dumpsys battery reset
        
  7. Przyjrzyj się działaniu aplikacji po ponownym włączeniu urządzenia. Marka aby po wyjściu z trybu uśpienia

Testowanie aplikacji w trybie gotowości

Aby przetestować tryb gotowości aplikacji, wykonaj te czynności:

  1. Konfigurowanie urządzenia lub urządzenia wirtualnego z Androidem 6.0 (interfejs API) na poziomie 23) lub wyższym.
  2. Podłącz urządzenie do komputera, na którym pracujesz, i zainstaluj aplikację.
  3. Uruchom aplikację i pozostaw ją aktywną.
  4. Wymuś przejście aplikacji w tryb gotowości, uruchamiając te polecenia:
        $ adb shell dumpsys battery unplug
        $ adb shell am set-inactive <packageName> true
        
  5. Wykonaj symulację wybudzania aplikacji za pomocą tych poleceń:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. Obserwuj działanie aplikacji po jej wybudzeniu. Upewnij się, że aplikacja płynnie przechodzi w tryb gotowości. W szczególności sprawdź, czy powiadomienia i zadania w tle działają zgodnie z oczekiwaniami.

Dopuszczalne przypadki użycia zwolnienia z opodatkowania

W tabeli poniżej opisujemy kilka przypadków użycia oraz wskazujemy, czy jest on akceptowany aby aplikacje mogły korzystać z ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS działanie intencji. Ogólnie aplikacja nie spełnia tych wymagań: wyjątkami, chyba że Uśpienie lub Czuwanie aplikacji spowoduje przerwanie głównej funkcji aplikacji lub z przyczyn technicznych aplikacja nie może używać FCM o wysokim priorytecie wiadomości.

Więcej informacji znajdziesz w artykule Pomoc techniczna dotycząca i innych przypadkach użycia.

Typ Przypadek użycia Czy można używać FCM? Czy to zwolnienie jest dozwolone? Uwagi
komunikator internetowy, czat lub aplikacje do połączeń; Wymaga dostarczania w czasie rzeczywistym wiadomości do użytkowników podczas urządzenie jest w trybie uśpienia lub aplikacja jest w trybie gotowości. Tak, używam FCM Niedozwolone Używaj wiadomości o wysokim priorytecie w FCM, aby wybudzić aplikację i uzyskać dostęp w sieci.
Tak, ale nie używa wiadomości o wysokim priorytecie w FCM.
komunikator internetowy, czat lub aplikacja do połączeń; firmowych aplikacji VOIP. Nie, nie można używać FCM ze względu na zależność techniczną od innej wiadomości lub uśpienie i tryb gotowości aplikacji zakłócają jej działanie. Akceptowalna
Aplikacja Bezpieczeństwo. Są to aplikacje, które zapewniają bezpieczeństwo użytkownikom i ich rodzinom. W odpowiednich przypadkach. Akceptowalna
Aplikacja do automatyzacji zadań. Główna funkcja aplikacji to planowanie zautomatyzowanych działań, np. natychmiastowego działania wiadomości, połączenia głosowe i zarządzanie zdjęciami. W odpowiednich przypadkach. Akceptowalna
Aplikacja towarzysząca urządzenia peryferyjnego. Główną funkcją aplikacji jest utrzymanie stałego połączenia z urządzenie peryferyjne, aby dostarczyć mu urządzenie peryferyjne dostęp do internetu. W odpowiednich przypadkach. Akceptowalna
Aplikacja musi okresowo łączyć się z urządzeniem peryferyjnym, aby przeprowadzić synchronizację. lub tylko z urządzeniami, takimi jak słuchawki bezprzewodowe, przez standardowe profile Bluetooth. W odpowiednich przypadkach. Niedozwolone