identyfikować blokady aktywacji utworzone przez inne interfejsy API;

Wiele bibliotek i interfejsów API systemu może uzyskiwać blokady wybudzania, które można przypisać do Twojej aplikacji. Może to utrudniać zidentyfikowanie w aplikacji blokady wybudzania, która może powodować problem. Jeśli nieprawidłowo używasz interfejsu API, może to spowodować, że aplikacja będzie zbyt długo utrzymywać blokadę wybudzania, nawet jeśli nie wywołujesz bezpośrednio interfejsów API blokady wybudzania.

W tym dokumencie znajdziesz listę typowych nazw blokad wybudzania, które możesz zobaczyć podczas korzystania z narzędzi do debugowania blokad wybudzania. Możesz też zobaczyć te nazwy w raporcie Android Vitals. W niektórych przypadkach blokada może być utworzona przez bibliotekę lub interfejs API systemu. W innych przypadkach istnieje powód, dla którego narzędzie zaciemnia nazwę blokady wybudzania używaną w aplikacji. Za pomocą narzędzi do debugowania możesz zidentyfikować nieprawidłowo działające blokady wybudzania, a następnie wyszukać nazwę blokady wybudzania w tym dokumencie, aby dowiedzieć się, który interfejs API może powodować problem i jak go rozwiązać.

W tym dokumencie opisujemy sytuacje, w których mogą być tworzone blokady wybudzania. W każdym z tych przypadków blokada może być utworzona przez inną bibliotekę lub interfejs API, ale jest przypisywana do aplikacji, która wywołała ten interfejs API.

AlarmManager

AlarmManager uzyskuje blokady wybudzania i przypisuje je do aplikacji wywołującej. AlarmManager uzyskuje blokadę wybudzania, gdy włączy się alarm, i zwalnia ją, gdy metoda onReceive() transmisji alarmu zakończy działanie.

Nazwy blokad wybudzania

AlarmManager tworzy blokady wybudzania o nazwie *alarm*. (Gwiazdki są częścią nazwy blokady wybudzania i nie reprezentują symboli wieloznacznych).

Rekomendacja

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

  • Użyj AlarmManager, aby zoptymalizować częstotliwość planowania alarmów.
  • Używaj tylko alarmów RTC_WAKEUP (które wybudzają urządzenie), gdy jest to konieczne.
  • Ogranicz używanie alarmów i unikaj wykonywania długotrwałych zadań w metodzie onReceive().

Dźwięk i multimedia

Interfejsy API multimediów mogą uzyskiwać blokady wybudzania podczas nagrywania lub odtwarzania dźwięku. Blokady wybudzania są przypisywane do aplikacji do połączeń.

Nazwy blokad wybudzania

Interfejsy API multimediów uzyskują blokady uśpienia o różnych nazwach, które zaczynają się od Audio:

  • AudioBitPerfect: służy do odtwarzania dźwięku przez USB bez utraty jakości.
  • AudioDirectOut: służy do odtwarzania dźwięku bez utraty jakości na telewizorze lub specjalnym urządzeniu.
  • AudioDup: używane do odtwarzania powiadomień podczas połączenia przez Bluetooth lub USB.
  • AudioIn: używany do nagrywania dźwięku w trybie kamery, gdy mikrofon jest aktywny.
  • AudioMix: służy do odtwarzania dźwięku na wspólnym urządzeniu.
  • AudioOffload: używany do długotrwałego odtwarzania tylko muzyki w aplikacjach, które obsługują ten tryb.
  • AudioSpatial: służy do odtwarzania wielokanałowego dźwięku z filmu lub muzyki na urządzeniach obsługujących dźwięk przestrzenny.
  • AudioUnknown: używane, gdy inne sytuacje nie mają zastosowania.
  • MmapCapture: służy do rejestrowania dźwięku z małym opóźnieniem.
  • MmapPlayback: używany do odtwarzania z niskim opóźnieniem, np. w przypadku gier lub profesjonalnych aplikacji audio.

Rekomendacja

Zalecamy stosowanie tych sprawdzonych metod:

  • Nie używaj nazw blokad wybudzania, które zaczynają się od Audio.
  • Jeśli korzystasz z interfejsów API do obsługi multimediów, nie musisz bezpośrednio uzyskiwać blokad wybudzania. Możesz polegać na tym, że interfejsy API uzyskają niezbędne blokady wybudzania.
  • Gdy korzystasz z interfejsów API multimediów, zakończ sesję multimedialną, gdy nie jest już potrzebna.

Komunikacja w chmurze Firebase (FCM)

GCM uzyskuje blokadę wybudzania podczas dostarczania do aplikacji transmisji Komunikacji w chmurze Firebase (FCM). Blokada wybudzania jest zwalniana po zakończeniu wykonywania metody transmisji FCMonMessageReceived().

Nazwy blokad wybudzania

GCM uzyskuje blokadę wybudzania o nazwie GOOGLE_C2DM.

Rekomendacja

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

JobScheduler

Zadania JobScheduler uzyskują blokady uśpienia podczas wykonywania zadań w tle. Blokady wybudzania są przypisywane do aplikacji, która utworzyła procesy.

Nazwy blokad wybudzania

Nazwy blokad wybudzania uzyskanych przez JobScheduler zależą od wersji systemu Android, na której są uruchamiane, oraz od celu zadania.

Elementy w nawiasach trójkątnych to zmienne. Na przykład „<package_name>” to nazwa pakietu aplikacji, a nie tekst <package name>. Jednak *job* to ciąg znaków *job* z gwiazdkami, które nie są używane jako symbole wieloznaczne.

Android 15 i starsze

Zadania zainicjowane przez użytkownika tworzą blokady wybudzania o nazwach zgodnych z tym wzorcem:

*job*u/@<name_space>@/<package_name>/<classname>

Inne zadania korzystające z tego wzorca:

*job*/@<name_space>@/<package_name>/<classname>
Android 16 lub nowszy

Zadania zainicjowane przez użytkownika tworzą blokady wybudzania o nazwach zgodnych z tym wzorcem:

*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

Zadania priorytetowe mają ten wzorzec:

*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>

Zwykłe zadania korzystają z tego wzorca:

*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
Przykład

Załóżmy, że istnieje przyspieszone zadanie z przestrzenią nazw backup i tagiem śledzenia started. Nazwa pakietu to com.example.app, a klasa, która utworzyła zadanie, to com.backup.BackupFileService.

Na urządzeniach z Androidem 15 lub starszym blokada wybudzania będzie się nazywać:

*job*/@backup@/com.example.app/com.backup.BackupFileService

Na urządzeniach z Androidem 16 lub nowszym blokada wybudzania będzie nosić nazwę:

*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService

Rekomendacja

Sprawdź, jak korzystasz z zadań JobScheduler. W szczególności postępuj zgodnie z naszymi wskazówkami dotyczącymi optymalizacji wykorzystania baterii w przypadku interfejsów API do planowania zadań.

Lokalizacja

LocationManagerFusedLocationProviderClient używają blokad wybudzania, aby uzyskiwać i przekazywać lokalizację urządzenia. Blokady wybudzania są przypisywane do aplikacji, która wywołała te interfejsy API.

Nazwy blokad wybudzania

Usługi lokalizacyjne mają te nazwy:

  • CollectionLib-SigCollector
  • NetworkLocationLocator
  • NetworkLocationScanner
  • NlpCollectorWakeLock
  • NlpWakeLock
  • *location*

Rekomendacja

Optymalizacja korzystania z lokalizacji Możesz na przykład ustawić limity czasu, grupować żądania lokalizacji lub korzystać z pasywnych aktualizacji lokalizacji.

WorkManager

Instancje robocze WorkManager uzyskują blokady uśpienia podczas wykonywania zadań w tle. Blokady wybudzania są przypisywane do aplikacji, która utworzyła procesy.

Nazwy blokad wybudzania

Nazwy blokad uśpienia uzyskanych przez WorkManager zależą od wersji systemu Android, na której działają.

Android 15 i starsze

Zadania WorkManager tworzą blokady wybudzania o nazwach zgodnych z tym wzorcem:

*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 lub nowszy

Przyspieszone zadania tworzą blokady wybudzania o nazwach zgodnych z tym wzorcem:

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

Zwykłe zadania są zgodne z tym wzorcem:

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

Domyślnie nazwa instancji roboczej to <trace_tag>.

Przykład

Załóżmy, że istnieje pracownik z usługą ekspresową o imieniu BackupFileWorker. Nazwa pakietu to com.example.app.

Na urządzeniach z Androidem 15 lub starszym blokada wybudzania będzie się nazywać:

*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

Na urządzeniach z Androidem 16 lub nowszym blokada wybudzania będzie nosić nazwę:

*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService

Rekomendacja

Sprawdź wykorzystanie procesów WorkManager. W szczególności postępuj zgodnie z naszymi wskazówkami dotyczącymi optymalizacji wykorzystania baterii w przypadku interfejsów API do planowania zadań.

_UNKNOWN

Jeśli narzędzia do debugowania uznają, że nazwa blokady wybudzania zawiera informacje umożliwiające identyfikację, nie wyświetlają jej. Zamiast tego oznaczają blokadę wybudzania jako _UNKNOWN. Narzędzia mogą to robić, jeśli nazwa blokady wybudzania zawiera adres e-mail.

Rekomendacja

Stosuj sprawdzone metody nazewnictwa blokad wybudzania i unikaj używania w nazwie blokady wybudzania informacji umożliwiających identyfikację użytkowników. Jeśli znajdziesz blokadę wybudzania o nazwie _UNKNOWN przypisaną do Twojej aplikacji, spróbuj zidentyfikować, która to blokada, i nadaj jej inną nazwę.