Wakeups to mechanizm w interfejsie AlarmManager API, który umożliwia deweloperom ustawienie alarmu, który obudzi urządzenie o określonej godzinie. Aplikacja ustawia alarm wybudzenia, wywołując jedną z metod set() w AlarmManager z użyciem flagi RTC_WAKEUP lub ELAPSED_REALTIME_WAKEUP. Gdy włączy się alarm budzenia, urządzenie wyjdzie z trybu niskiego zużycia energii i będzie utrzymywać częściową blokadę uśpienia podczas wykonywania metody onReceive() lub onAlarm() alarmu. Jeśli alarmy wybudzające są wywoływane zbyt często, mogą wyczerpać baterię urządzenia.
Jeśli aplikacja zbyt często wybudza urządzenie, możesz skorzystać z informacji na tej stronie, aby zdiagnozować i rozwiązać problem.
Rozwiązanie problemu
AlarmManager został wprowadzony we wczesnych wersjach platformy Android, ale z biegiem czasu wiele przypadków użycia, które wcześniej wymagały AlarmManager, jest teraz lepiej obsługiwanych przez nowsze funkcje, takie jak WorkManager.
W tej sekcji znajdziesz wskazówki dotyczące zmniejszania liczby alarmów wybudzających, ale w dłuższej perspektywie warto rozważyć przeniesienie aplikacji, aby była zgodna z zaleceniami w sekcji Sprawdzone metody.
Określ miejsca w aplikacji, w których planujesz alarmy wybudzenia, i zmniejsz częstotliwość ich włączania. Oto kilka porad:
Wyszukaj wywołania różnych metod
set()wAlarmManager, które zawierają flagęRTC_WAKEUPlubELAPSED_REALTIME_WAKEUP.Zalecamy umieszczenie w nazwie tagu alarmu nazwy pakietu, klasy lub metody, aby można było łatwo zidentyfikować w kodzie źródłowym miejsce, w którym został ustawiony alarm. Oto kilka dodatkowych wskazówek:
- Nie podawaj w nazwie żadnych informacji umożliwiających identyfikację, takich jak adres e-mail. W przeciwnym razie urządzenie rejestruje
_UNKNOWNzamiast nazwy alarmu. - Nie pobieraj nazwy klasy ani metody programowo, np. wywołując
getName(), ponieważ może ona zostać zaciemniona przez ProGuard. Zamiast tego użyj ciągu znaków zakodowanego na stałe. - Nie dodawaj do tagów alarmów licznika ani unikalnych identyfikatorów. System nie będzie mógł agregować alarmów ustawionych w ten sposób, ponieważ wszystkie mają unikalne identyfikatory.
- Nie podawaj w nazwie żadnych informacji umożliwiających identyfikację, takich jak adres e-mail. W przeciwnym razie urządzenie rejestruje
Po rozwiązaniu problemu sprawdź, czy alarmy wybudzania działają zgodnie z oczekiwaniami, uruchamiając to polecenie ADB:
adb shell dumpsys alarm
To polecenie zawiera informacje o stanie usługi systemu alarmowego na urządzeniu. Więcej informacji znajdziesz w artykule dumpsys.
Sprawdzone metody
Alarmów wybudzających używaj tylko wtedy, gdy aplikacja musi wykonać operację widoczną dla użytkownika (np. opublikować powiadomienie lub ostrzec użytkownika). Listę sprawdzonych metod dotyczących AlarmManager znajdziesz w artykule Planowanie alarmów.
Nie używaj AlarmManager do planowania zadań w tle, zwłaszcza powtarzających się lub sieciowych. Do planowania zadań w tle używaj biblioteki WorkManager, ponieważ zapewnia ona te korzyści:
- grupowanie – zadania są łączone, aby zmniejszyć zużycie baterii;
- trwałość – jeśli urządzenie zostanie ponownie uruchomione, zaplanowane zadania WorkManager zostaną wykonane po zakończeniu ponownego uruchomienia;
- kryteria – zadania mogą być uruchamiane na podstawie warunków, np. czy urządzenie jest ładowane lub czy jest dostępne Wi-Fi;
Więcej informacji znajdziesz w przewodniku po przetwarzaniu w tle.
Nie używaj AlarmManager do planowania operacji czasowych, które są ważne tylko wtedy, gdy aplikacja jest uruchomiona (innymi słowy, operacja czasowa powinna zostać anulowana, gdy użytkownik zamknie aplikację). W takich sytuacjach używaj klasy Handler, ponieważ jest ona łatwiejsza w użyciu i znacznie bardziej wydajna.
Polecane dla Ciebie
- Uwaga: tekst linku jest wyświetlany, gdy język JavaScript jest wyłączony.
- Ciągłe częściowe blokady uśpienia
- ANR