identyfikować blokady aktywacji utworzone przez inne interfejsy API;

Kilka bibliotek i interfejsów API systemu może uzyskiwać blokady aktywacji, które są przypisywane do Twojej aplikacji. Może to utrudniać identyfikację blokady aktywacji w aplikacji, która może powodować problem. Niewłaściwe użycie interfejsu API może spowodować, że aplikacja będzie utrzymywać blokadę aktywacji zbyt długo, nawet jeśli nie wywołujesz interfejsów API blokady bezpośrednio.

W tym dokumencie znajdziesz listę typowych nazw blokad wybudzania, które możesz zobaczyć podczas korzystania z narzędzi do debugowania blokad wybudzania. Te nazwy możesz też zobaczyć w raporcie Android Vitals. W niektórych przypadkach blokada aktywacji mogła zostać utworzona przez bibliotekę lub interfejs API systemu. W innych przypadkach narzędzie może zaciemniać nazwę blokady aktywacji używaną w aplikacji. Możesz użyć narzędzi do debugowania, aby zidentyfikować nieprawidłowo działające blokady aktywacji, a potem sprawdzić w tym dokumencie, który interfejs API może być przyczyną problemu i jak go rozwiązać.

W tym dokumencie opisano te nazwy blokad aktywacji: W każdym przypadku blokada może zostać utworzona przez inną bibliotekę lub interfejs API, ale przypisana jest do aplikacji, która wywołała ten interfejs API.

*alarm*

Ten blokadę aktywacji uzyskuje AlarmManager i przypisuje ją do wywołującej aplikacji. AlarmManager uzyskuje blokadę aktywacji, gdy włącza się alarm, i zwalnia ją, gdy metoda onReceive() dotycząca rozgłaszania alarmu zakończy działanie.

Rekomendacja

Aby zoptymalizować działanie alarmu, zalecamy stosowanie tych sprawdzonych metod:

  • Użyj AlarmManager, aby zoptymalizować częstotliwość ustawiania alarmów.
  • W razie potrzeby używaj tylko alarmów RTC_WAKEUP (które budzą urządzenie).
  • Ogranicz użycie alarmów i unikaj wykonywania długich zadań za pomocą metody onReceive().

AudioIn, AudioMix itp.

Podczas nagrywania lub odtwarzania dźwięku interfejsy API multimediów uzyskują różne blokady aktywacji, których nazwy zaczynają się od Audio. Blokady aktywacji są przypisywane do aplikacji wywołującej.

AudioIn jest pozyskiwany podczas AudioRecord w trybie kamery, gdy mikrofon jest aktywny. AudioMix jest pobierany podczas AudioTrackodtwarzania na urządzeniu. Inne interfejsy API multimediów mogą uzyskiwać blokady aktywacji o innych nazwach, zaczynających się od Audio.

Rekomendacja

Zalecamy te działania:

  • Nie używaj nazw blokad wybudzania, które zaczynają się od Audio.
  • Jeśli używasz interfejsów API multimediów, nie musisz uzyskiwać blokad aktywacji bezpośrednio. Możesz polegać na interfejsach API, które uzyskają za Ciebie niezbędne blokady aktywacji.
  • Jeśli korzystasz z interfejsów API multimediów, zakończ sesję multimediów, gdy nie będziesz jej już potrzebować.

GOOGLE_C2DM

GCM uzyskuje ten blokadę aktywacji podczas przesyłania do aplikacji transmisji Komunikacji w chmurze Firebase (FCM). Blokada aktywacji jest zwalniana po zakończeniu wykonywania metodyonMessageReceived() transmisji FCM.

Rekomendacja

Aby zoptymalizować działanie FCM, zalecamy stosowanie tych sprawdzonych metod:

*job*/<package_name>/<package_and_job_name>

Blokady budzenia są używane przez zadania JobScheduler podczas wykonywania zadań w tle. Blokady budzenia są przypisywane do aplikacji, która utworzyła procesy.

„<package_name>" to nazwa pakietu aplikacji, a nie dosłowny tekst <package name>. Podobnie element „<package_and_job_name>” to nazwa pakietu, po której następuje nazwa zadania. *job* to sekwencja znaków *job* z gwiazdkami, które nie są używane jako symbole wieloznaczne. Oto przykład nazwy takiego blokowania:

*job*/com.example.app/com.example.app.example.path.ExampleJobService

Rekomendacja

Sprawdź, jak używasz zadań JobScheduler. W szczególności postępuj zgodnie z naszą instrukcją optymalizacji zużycia baterii w przypadku interfejsów API do planowania zadań.

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService

Te blokady uśpienia są używane przez wątki WorkManagera podczas wykonywania zadań w tle. Blokady aktywacji są przypisywane do aplikacji, która utworzyła procesy.

„<package_name>" to nazwa pakietu aplikacji, a nie dosłowny tekst <package name>. *job* to sekwencja znaków *job* z gwiazdkami, które nie są używane jako symbole wieloznaczne.

Rekomendacja

Sprawdź, jak używasz instancji roboczych WorkManager. W szczególności postępuj zgodnie z naszą instrukcją optymalizacji zużycia baterii w przypadku interfejsów API do planowania zadań.

NetworkLocationLocator, FusedLocation, *location*

Te nazwy blokady aktywacji są używane przez LocationManagerFusedLocationProviderClient do uzyskiwania i przekazywania lokalizacji urządzenia. Blokady aktywacji są przypisywane do aplikacji, która wywołała te interfejsy API.

Rekomendacja

Optymalizacja korzystania z lokalizacji. Możesz na przykład ustawić limity czasu, zbiorcze żądania lokalizacji lub korzystać z pasywnego aktualizowania lokalizacji.

_UNKNOWN

Jeśli narzędzia do debugowania uznają, że nazwa blokady aktywacji zawiera informacje umożliwiające identyfikację, nie wyświetlają rzeczywistej nazwy blokady aktywacji. Zamiast tego określają blokadę aktywacji jako _UNKNOWN. Może się tak zdarzyć, jeśli nazwa blokady aktywacji zawiera adres e-mail.

Rekomendacja

Stosuj sprawdzone metody nazewnictwa blokad wybudzania i unikaj używania informacji umożliwiających identyfikację w nazwie blokady wybudzania. Jeśli znajdziesz w aplikacji blokadę aktywacji o nazwie _UNKNOWN, spróbuj ją zidentyfikować i nadać jej inną nazwę.