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*
: utworzono przezAlarmManager
.AudioIn
,AudioMix
: utworzone przez interfejsy API mediów.GOOGLE_C2DM
: uzyskane podczas przesyłania do aplikacji wiadomości z Komunikacji w chmurze Firebase (FCM).*job*/<package_name>/<package_and_job_name>
: Tworzone przez zadania JobScheduler.*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
: utworzone przez instancje robocze WorkManagera.NetworkLocationLocator
,FusedLocation
,*location*
: utworzone przez interfejsy API dotyczące lokalizacji._UNKNOWN
: wyświetlane przez narzędzia do debugowania, jeśli nazwa blokady wybudzania zawiera informacje umożliwiające identyfikację osoby.
*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 AudioTrack
odtwarzania 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:
- Optymalizuj częstotliwość dostarczania FCM.
- Nie używaj komunikacji w chmurze Firebase o wysokim priorytecie, chyba że wiadomość musi zostać dostarczona natychmiast.
- Jak najszybciej przeprowadź metodę
onMessageReceived()
. Więcej informacji znajdziesz w wskazówkach dotyczących Firebase.
*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 LocationManager
i FusedLocationProviderClient
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ę.