過剰なウェイクアップ
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
wakeup は AlarmManager
API のメカニズムであり、デベロッパーはこれを使用して、指定された時刻にデバイスを起動するアラームを設定できます。アプリで wakeup アラームを設定するには、RTC_WAKEUP
フラグまたは ELAPSED_REALTIME_WAKEUP
フラグを指定して AlarmManager
のいずれかの set()
メソッドを呼び出します。wakeup アラームがトリガーされると、デバイスの省電力モードが解除され、アラームの onReceive()
メソッドまたは onAlarm()
メソッドの実行中に部分的な wake lock が保持されます。wakeup アラームが過度にトリガーされると、デバイスの電池が消耗する可能性があります。
アプリの品質向上に役立つように、Android ではアプリの過度の wakeup アラームについて自動的にモニターし、情報を Android Vitals に表示します。データの収集方法については、Play Console のドキュメントをご覧ください。
アプリがデバイスに過度の wakeup を行っている場合、このページのガイダンスが問題の診断と解決に役立ちます。
問題を解決する
AlarmManager
は
Android プラットフォームの初期バージョンで導入されましたが、時間が経つにつれて、
以前のプラットフォームから
現在は AlarmManager
になっています
たとえば
WorkManager。
このセクションでは wakeup アラームを減らすためのヒントを紹介しますが、長期的には、おすすめの方法セクションの推奨事項に沿ってアプリを移行することを検討してください。
wakeup アラームをスケジュール設定するアプリ内の場所を特定し、アラームがトリガーされる頻度を減らします。次のヒントを参考にしてください。
問題を解決したら、次の ADB コマンドを実行して、wakeup アラームが適切に機能していることを確認します。
adb shell dumpsys alarm
このコマンドで、デバイスのアラーム システム サービスのステータスに関する情報が得られます。詳細については、dumpsys をご覧ください。
おすすめの方法
wakeup アラームは、アプリがユーザー向けの動作(通知の送信、ユーザーに対するアラートなど)を行う必要がある場合にのみ使用します。AlarmManager のおすすめの方法の一覧については、アラームのスケジュールを設定するをご覧ください。
バックグラウンド タスク(特に、繰り返されるバックグラウンド タスクやネットワークのバックグラウンド タスク)のスケジュール設定に AlarmManager
を使用しないでください。バックグラウンド タスクをスケジュール設定するには、WorkManager を使用します。これは、次の利点があるためです。
- バッチ処理 - ジョブが結合されることで、電池の消費量が削減されます
- 永続性 - デバイスが再起動されると、再起動が完了した後にスケジュール設定された WorkManager ジョブが実行されます
- 条件 - デバイスが充電中かどうか、Wi-Fi が利用可能かどうかなどの条件に基づいてジョブを実行できます
詳細については、バックグラウンド処理ガイドをご覧ください。
アプリの実行中のみ有効なタイミング処理のスケジュール設定に AlarmManager
を使用しないでください(つまり、タイミング処理はユーザーがアプリを終了した時点でキャンセルされる必要があります)。そのような状況では、Handler
クラスを使用する方が簡単で効率的です。
あなたへのおすすめ
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-27 UTC。
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2025-07-27 UTC。"],[],[],null,["# Excessive wakeups\n\nWakeups are a mechanism in the\n[`AlarmManager`](/reference/android/app/AlarmManager) API that\nlets developers set an alarm to wake up a device at a specified time. Your app\nsets a wakeup alarm by calling one of the `set()` methods in\n[`AlarmManager`](/reference/android/app/AlarmManager) with\neither the\n[`RTC_WAKEUP`](/reference/android/app/AlarmManager#RTC_WAKEUP)\nor\n[`ELAPSED_REALTIME_WAKEUP`](/reference/android/app/AlarmManager#ELAPSED_REALTIME_WAKEUP)\nflag. When a wakeup alarm is triggered, the device comes out of low-power mode\nand holds a [partial wake lock](/topic/performance/vitals/wakelock) while executing the alarm's\n[`onReceive()`](/reference/android/content/BroadcastReceiver#onReceive(android.content.Context,%20android.content.Intent))\nor\n[`onAlarm()`](/reference/android/app/AlarmManager.OnAlarmListener#onAlarm())\nmethod. If wakeup alarms are triggered excessively, they can drain a device's\nbattery.\n\nTo help you improve app quality, Android automatically monitors apps for\nexcessive wakeup alarms and displays the information in Android vitals. For\ninformation on how the data is collected, see [Play Console\ndocs](https://support.google.com/googleplay/android-developer/answer/7385505).\n\nIf your app is waking up the device excessively, you can use the guidance in\nthis page to diagnose and fix the problem.\n\nFix the problem\n---------------\n\nThe [`AlarmManager`](/reference/android/app/AlarmManager) was\nintroduced in early versions of the Android platform, but over time, many use\ncases that previously required\n[`AlarmManager`](/reference/android/app/AlarmManager) are now\nbetter served by newer features like\n[WorkManager](/topic/libraries/architecture/workmanager).\nThis section contains tips for reducing wake up alarms, but in the long term,\nconsider migrating your app to follow the recommendations in the [best\npractices](#best_practices) section.\n\nIdentify the places in your app where you schedule wakeup alarms and reduce\nthe frequency that those alarms are triggered. Here are some tips:\n\n- Look for calls to the various\n [`set()`](/reference/android/app/AlarmManager#set(int,%20long,%20java.lang.String,%20android.app.AlarmManager.OnAlarmListener,%20android.os.Handler))\n methods in\n [`AlarmManager`](/reference/android/app/AlarmManager) that\n include either the\n [`RTC_WAKEUP`](/reference/android/app/AlarmManager#RTC_WAKEUP)\n or\n [`ELAPSED_REALTIME_WAKEUP`](/reference/android/app/AlarmManager#ELAPSED_REALTIME_WAKEUP)\n flag.\n\n- We recommend including your package, class, or method name in your alarm's tag\n name so that you can easily identify the location in your source where the\n alarm was set. Here are some additional tips:\n\n - Leave out any personally identifying information (PII) in the name, such as an email address. Otherwise, the device logs `_UNKNOWN` instead of the alarm name.\n - Don't get the class or method name programmatically, for example by calling [`getName()`](/reference/java/lang/Class#getName()), because it could get obfuscated by Proguard. Instead use a hard-coded string.\n - Don't add a counter or unique identifiers to alarm tags. The system will not be able to aggregate alarms that are set that way because they all have unique identifiers.\n\nAfter fixing the problem, verify that your wakeup alarms are working as\nexpected by running the following [ADB](/studio/command-line/adb)\ncommand: \n\n adb shell dumpsys alarm\n\nThis command provides information about the status of the alarm system service\non the device. For more information, see\n[dumpsys](https://source.android.com/devices/tech/debug/dumpsys).\n\nBest practices\n--------------\n\nUse wakeup alarms only if your app needs to perform a user facing operation\n(such as posting a notification or alerting the user). For a list of\nAlarmManager best practices, see [Scheduling\nAlarms](/training/scheduling/alarms).\n\nDon't use\n[`AlarmManager`](/reference/android/app/AlarmManager) to\nschedule background tasks, especially repeating or network background tasks. Use\n[WorkManager](/topic/libraries/architecture/workmanager)\nto schedule background tasks because it offers the following benefits:\n\n- batching - jobs are combined so that battery consumption is reduced\n- persistence - if the device is rebooted, scheduled WorkManager jobs run after the reboot finishes\n- criteria - jobs can run based on conditions, such as whether or not the device is charging or WiFi is available\n\nFor more information, see [Guide to background processing](/guide/background).\n\nDon't use [`AlarmManager`](/reference/android/app/AlarmManager)\nto schedule timing operations that are valid only while the app is running (in\nother words, the timing operation should be canceled when the user exits the\napp). In those situations, use the\n[`Handler`](/reference/android/os/Handler) class because it is\neasier to use and much more efficient.\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [Stuck partial wake locks](/topic/performance/vitals/wakelock)\n- [ANRs](/topic/performance/vitals/anr)"]]