Android 13(API レベル 33)では、以下のバッテリー維持対策を導入しています。
- システムがアプリを「制限付き」のアプリ スタンバイ バケットに入れるタイミングに関するルールが更新されました。プラットフォーム API を呼び出すと、アプリがどのバケットに属しているかを確認できます。
- ユーザーがバックグラウンドのバッテリー使用量についてアプリを「制限付き」状態に設定した場合にアプリが実行できる処理に関して、新しい制限が追加されました。
- 長時間実行されているフォアグラウンド サービスについてユーザーに警告する新しいシステム通知が追加されました。
アプリが「制限付き」のアプリ スタンバイ バケットに入れられるタイミングの更新
アプリが除外の対象となる場合を除き、アプリで次のいずれかの動作が発生すると、システムはアプリを制限付きのバケットに入れます。
ユーザーが 8 日間アプリを操作しなかった。アプリのサービスにバインドする別のアプリをユーザーが操作した場合、システムはアプリが「使用された」と見なします。
(対応デバイスのみ)アプリがバックグラウンドで 24 時間以内にデバイスのバッテリーを大量に消費した。このしきい値はデバイスに依存します。特に低 RAM デバイスではしきい値が異なる場合があります。
システムは、アプリがデバイスのバッテリー寿命に及ぼす影響を測定する際に、アプリがさまざまな場所で行う次のような処理を考慮します。
- ジョブ(優先ジョブを含む)
- ブロードキャスト レシーバ
- バックグラウンド サービス
- システムがアプリのプロセスをキャッシュに保存したかどうか
ユーザーの操作によりアプリを「制限付き」のバケットから出すことができる
ユーザーが次のような方法でアプリを操作した場合、システムはアプリを制限付きのバケットから取り出して別のアプリ スタンバイ バケットに入れます。
ユーザーがアプリから送信された通知をタップした。
ユーザーがアプリに属するウィジェットでアクションを実行した。
ユーザーがメディアボタンを押してアプリのフォアグラウンド サービスに影響を与えた。
ユーザーが Android Automotive OS の操作中にアプリに接続し、アプリでフォアグラウンド サービスまたは
CONNECTION_TYPE_PROJECTION
のいずれかが使用された。アプリがピクチャー イン ピクチャー(PiP)モードで表示された。
アプリが画面上でアクティブなアプリの一つになった(これは、主として大画面デバイスに適用されます)。
バックグラウンドの制限付きバッテリー使用量に関する新しい制限
Android の既存のバージョンには、アプリがバックグラウンドで動作しているときに実行できる作業量をユーザーが調整できる機能があります。システム設定の [バッテリー使用量] ページには、次のオプションが表示されます。
- 制限なし: バックグラウンド処理を許可し、バックグラウンドのバッテリー消費量の増加を許容します。
- 最適化(デフォルト): ユーザーによるアプリの操作方法に基づいて、アプリがバックグラウンド処理を行う能力を最適化します。
- 制限付き: アプリがさまざまな処理を実行できることよりも、デバイスのバッテリー寿命を優先します。アプリがバックグラウンドで実行できる処理に対して、より大きな制限が加えられます。
Android 9(API レベル 28)以降、「制限付き」状態に設定されたアプリは以下の制限を受けます。
- フォアグラウンド サービスを起動できない
- 既存のフォアグラウンド サービスがフォアグラウンドから削除される
- アラームがトリガーされない
- ジョブが実行されない
アプリが Android 13 をターゲットとしている場合、他の理由でアプリが開始されるまで、システムは以下のブロードキャストを配信しません。
BOOT_COMPLETED
LOCKED_BOOT_COMPLETED
長時間実行されているフォアグラウンド サービスに対するシステム通知
アプリが長時間(24 時間以内に少なくとも 20 時間)フォアグラウンド サービスを実行していることを検出すると、システムはユーザーに通知を送信して、フォアグラウンド サービス(FGS)タスク マネージャーの操作を促します。通知には次のテキストが表示されます。
APP is running in the background for a long time. Tap to review.
次のいずれかの条件が満たされている場合、この通知は表示されません。
- フォアグラウンド サービスに関連付けられた通知が表示されている。つまり、ユーザーが通知をスワイプで非表示にしていない。
- フォアグラウンド サービスのタイプが
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
またはFOREGROUND_SERVICE_TYPE_LOCATION
である。
さらに、タイプが FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
または FOREGROUND_SERVICE_TYPE_LOCATION
のフォアグラウンド サービスをアプリが 24 時間以内に 4 時間を超えて実行している場合、システムはアプリが開始するすべてのフォアグラウンド サービスに対して長時間実行の通知を送信しません。
除外
以下のアプリは、Android 13 で導入されたバッテリー維持対策の適用対象から除外されます。
- システムアプリとシステム バインド アプリ
- コンパニオン デバイスのアプリ
- デバイス上でデモモードで実行されているアプリ
- デバイス所有者アプリ
- プロファイル所有者アプリ
- 永続的なアプリ
- VPN アプリ
ROLE_DIALER
ロールを持つアプリ- ユーザーがシステム設定で「制限なし」の機能を利用することを明示的に指定したアプリ
以下の状況では、アプリは「制限付き」のアプリ スタンバイ バケットに入れられる対象から除外され、8 日間操作されなかった場合のトリガーをバイパスできます。
- アクティブなウィジェットを含んでいる
- 次の権限のうち少なくとも 1 つが付与されている。
以下の状況では、アプリは Android 13 で導入されたほとんどのバッテリー維持対策の適用対象から除外されますが、長時間実行されているフォアグラウンド サービスに対する通知の送信は妨げられません。
- 進行中のアクティブな
MediaSession
がある - 次の権限のうち少なくとも 1 つが付与されている
テスト
以下のセクションでは、Android 13 で導入されたバッテリー維持対策がアプリに及ぼす影響をテストする方法をいくつか紹介します。
バックグラウンドでの使用を妨げる
アプリをバックグラウンドで実行できないようにするには、ターミナル ウィンドウで次のコマンドを実行します。
adb shell cmd appops set PACKAGE_NAME RUN_ANY_IN_BACKGROUND deny
アプリを制限付きのバケットに入れる
アプリを強制的に制限付きバケットに入れるには、ターミナル ウィンドウで次のコマンドを実行します。
adb shell am set-standby-bucket PACKAGE_NAME restricted