デバイスの電源を入れたままにするための適切な API を選択する

Android 搭載デバイスがアイドル状態になると、電池の消耗を防ぐため、すぐに一時停止状態になります。ただし、アプリで CPU が一時停止状態に移行しないようにする必要がある場合もあります。アプリが動作中に画面をオンにしておく必要がある場合もあります。それ以外の場合、アプリは画面をオンのままにする必要はありませんが、CPU をアクティブな状態にしておく必要があります。

アプリのニーズは、デベロッパーが採用するアプローチによって決まります。ただし、一般的な経験則として、できる限り軽量なアプローチを採用し、アプリがシステム リソースに及ぼす影響を最小限に抑える必要があります。このドキュメントでは、状況に適した Android テクノロジーを選択するうえで役立つ情報を提供します。

適切なテクノロジーを選択する

デバイスをスリープ状態にしないための最適なオプションは、アプリのニーズによって異なります。このセクションでは、適切なアプローチを選択するうえで役立つ情報を提供します。

デバイスの電源を入れたままにするための適切なアプローチを選択する方法をまとめたフローチャート。フローチャートの内容については、以下のテキストで詳しく説明します。

  • アプリで画面をオンにしておく必要がありますか?
    • はいの場合、画面をオンのままにするをご覧ください。必要な処理を行う専用の API がある場合があります。たとえば、通話 UI を実装する場合は、必要に応じて画面をオンに保つ Android Telecom フレームワークを使用できます。状況に合った特別な目的の API がない場合は、keepScreenOn API を使用できます。
  • アプリがフォアグラウンド サービスを実行しており、サービス実行中に画面がオフになってもデバイスを起動状態に保つ必要があるか?
    • いいえの場合、デバイスをスリープ状態にしないでおく必要はありません。ユーザーがアプリを操作している間は、デバイスはスリープ状態になりません。ユーザーがアプリを操作しておらず、フォアグラウンド サービスを実行していない場合は、必要に応じてデバイスを一時停止モードに移行させる必要があります。ユーザーがアプリを離れている間に特定の処理を完了させる必要がある場合は、バックグラウンド タスクのドキュメントで最適なオプションをご確認ください。
    • はいの場合、まずフォアグラウンド サービスを実際に使用する必要があることを確認します。状況によっては、フォアグラウンド サービスの代わりに、ニーズを満たすために使用できる特別な目的の API がある場合があります。これらの情報については、フォアグラウンド サービスのドキュメントをご覧ください。たとえば、ユーザーの位置情報を追跡する必要がある場合は、location フォアグラウンド サービスの代わりに ジオフェンシング API を使用できる可能性があります。
  • フォアグラウンド サービスが実行中で、デバイスの画面がオフになっているときにデバイスが一時停止すると、ユーザー エクスペリエンスに悪影響を及ぼしますか?(たとえば、フォアグラウンド サービスを使用して通知を更新している場合、デバイスが一時停止してもユーザー エクスペリエンスは悪化しません)。
    • No の場合、wake lock は使用しないでください。ユーザーがデバイスを操作して一時停止が解除されると、アクションは自動的に再開されます。
    • アクティビティのみである場合、ウェイクロックを使用する必要がある可能性があります。ただし、デバイスをスリープ状態にしないアクションで説明したように、すでに API を使用しているか、またはユーザーの代わりにウェイクロックを宣言するアクションを実行しているかどうかは確認する必要があります。

デバイスをスリープモードにしない操作

アプリが次のいずれかを行っている場合は、wake lock を自分で設定する必要はありません。次のアクションと API はすべて、デバイスをスリープ状態にしないようにします。

  • 音声を再生している場合、オーディオ システムがウェイクロックを設定して管理するため、自分で設定する必要はありません。
  • WorkManagerJobSchedulerDownloadManager などのタスク スケジューリング API またはライブラリを使用している場合、システムまたはライブラリはアプリに帰属するウェイクロックを取得します。
  • Media3 ExoPlayer を使用している場合は、ExoPlayer.setWakeMode() を使用して、プレーヤーにウェイクロックを設定させることができます。
  • 一部のデバイス センサーはウェイクアップ センサーです。SensorManager を使用すると、報告するデータがあるときにデバイスをウェイクアップさせることができます。センサーがウェイクアップ センサーかどうかを確認するには、Sensor.isWakeUpSensor を呼び出します。
  • アラームをスケジュール設定すると、アプリが実行されていなくても、アラームが鳴ったときにデバイスが起動します。

関連ドキュメント