Android 9(API レベル 28)では、デバイスの電源管理を改善する新機能が導入されています。これらの 新機能に加え、以前のバージョンにすでに存在していた機能に加えて、 システム リソースを最も必要とするアプリに割り当てることができます。
電源管理機能は、次の 2 つのカテゴリに分類されます。
- アプリ スタンバイ バケット
- システムがアプリの制限を行うアクセスするなど、デバイス リソースに ユーザーの使用パターンに基づく CPU またはバッテリー。これは Android 9。
- バッテリー セーバーの改善
- バッテリー セーバーをオンにすると、 すべてのアプリに制限が適用される。これは既存の機能であり Android 9 で改善されました。 で確認できます。
アプリ スタンバイ バケット
Android 9 では、新しいバッテリー管理機能としてアプリ スタンバイ バケットが導入されています。 アプリ スタンバイ バケットは、システムがアプリの優先順位を決定するのに役立ちます。リソースに対してリクエストを実行し、 アプリの利用日や使用頻度を確認できますアプリの使用状況に基づく 各アプリは 5 つの優先度バケットのいずれかに分類されます。システム アプリが使用するバケットに基づいて、各アプリで使用できるデバイス リソースを制限します。 あります
5 つのバケットは、次の特性に基づいてアプリをグループに優先順位付けします。
- 有効
ユーザーが現在アプリを使用している場合、アプリはアクティブ バケットに入ります。 例:
- アプリがアクティビティを開始した
- アプリがフォアグラウンド サービスを実行している
- アプリには、コンテンツ プロバイダに関連付けられた同期アダプターがあり、 フォアグラウンド アプリ
- ユーザーがアプリからの通知をクリックする
アプリがアクティブ バケット内にある場合、システムは アプリのジョブ、アラーム、FCM メッセージに対してのみです。
- ワーキング セット
頻繁に実行されているアプリが現在ではない場合、アプリはワーキング セット バケットに入ります。 アクティブです。たとえば、ユーザーがほとんどの日に起動するソーシャル メディア アプリは、 ワーキングセットに入る可能性が 高くなりますアプリはワーキング セットに昇格する すべてのバケットに適用されます。
アプリがワーキング セット内にある場合、システムはジョブの実行とアラームのトリガーの機能に緩やかな制限を加えます。詳しくは、 電源管理に関する制限
- 高頻度
アプリが定期的に(ただし必ずしもそうではない)に使用される場合、高頻度バケットに入ります 日々活用しています。たとえば、ユーザーがジムで実行するワークアウト記録アプリは、高頻度バケットに入っている可能性があります。
アプリが高頻度バケット内にある場合、システムはより強い制限を ジョブの実行とアラームのトリガーが可能です。また、 優先度の高い FCM メッセージを 配信します詳しくは、 電源管理に関する制限
- 低頻度
アプリがあまり使用されない場合、低頻度バケットに入ります。たとえば、ホテルのアプリは そのホテルの滞在中にしか実行しない 可能性は低いかもしれません あります。
アプリが低頻度バケット内にある場合、システムは ジョブの実行、アラームのトリガー、優先度の高い FCM メッセージの受信が可能になります。 また、アプリのインターネットに接続する機能も制限します。対象 詳しくは、電源管理に関する制限をご覧ください。
- 思わない
インストールされているが、実行されていないアプリは、「なし」バケットに割り当てられます。 システムはこうしたアプリに厳しい制限を課しています。
システムは各アプリを優先度バケットに動的に割り当て、そのアプリを できます。マシンを使用するプリロード アプリが 各ユーザーが予測を行う確率を 適切なバケットにアプリを割り当てます。システムが アプリがデバイスに存在しない場合、デフォルトでは 使用された日時を確認できますアプリが動作しているバケットは、その時点から アプリの優先順位を高くし アプリで利用できるシステム リソースが増加します。特にバケットでは アプリのジョブが実行される頻度 アプリが優先度の高いアラートを受信できる頻度、Firebase Cloud メッセージング(FCM)メッセージ。 これらの制限は、デバイスがバッテリー駆動中の場合にのみ適用されます。システム デバイスの充電中は、アプリにこれらの制限は適用されません。
どのメーカーも、アクティブでないアプリについて独自の基準を設定できる
割り当てられます。アプリがどのバケットであるかに影響を及ぼそうとしないでください。
割り当てられていますその代わりに、どのような環境でもアプリが適切に動作することを
決定しますアプリは現在のバケットを
新しいメソッドを呼び出す
UsageStatsManager.getAppStandbyBucket()
。
おすすめの方法
アプリがすでにベスト プラクティスに従っている場合は、 Doze とアプリ スタンバイ、 新しい電源管理機能の処理は難しくないはずです。ただし、 以前は正常に機能していた一部のアプリの動作が、問題が発生する可能性があります。
- システムを操作してアプリを 1 つのバケットに入れたり、 別のものです。システムのバケット化方法は変更されることがあり、 メーカーは、独自のバケット化アプリを独自の アルゴリズムです。そのようなことはせず、アプリはどのバケット内にあっても適切に動作することが重要です。
- アプリにランチャー アクティビティがない場合、 作成します。アプリの設計を見直して できます。
- アプリの通知が操作できない場合は、ユーザーはトリガーできません。 通知を操作してアプリをアクティブ バケットに昇格させることができます。イン そのような場合は、通知機能を再設計して、 返すことができます。詳しくは、 マテリアル デザイン通知のデザイン パターンをご覧ください。
同様に、通知を受信してもアプリが通知を表示しない場合は、 高優先度 FCM メッセージを送ると、 ユーザーがアプリを操作したり、アプリを 選択します。実際、優先度の高い FCM メッセージの用途は、 このような状況は発生しません。もし トリガーされない場合に FCM メッセージを高優先度として不適切としてマークする その他の好ましくない結果を引き起こす可能性がある。たとえば、 アプリがその割り当てを使い切って 通常の優先度として処理される FCM メッセージ。
注: ユーザーが通知を繰り返し閉じると、 システムは、今後その通知をブロックするオプションをユーザーに提供します。 アプリをクラッシュさせないようにするために、ユーザーに不要な通知を送信しないでください。 アクティブ バケットです。
アプリが複数のパッケージに分割されている場合、それらのパッケージは アクセス レベルも異なります。必ず さまざまなバケットに割り当てられたパッケージを使用してそのようなアプリをテストし、 確認する必要があります。
バッテリー セーバーの改善
Android 9 では、バッテリー セーバー モードにさまざまな改善が加えられています。 適用される具体的な制限はデバイス メーカーが決定します。たとえば、 AOSP がビルドすると、次の制限が適用されます。
- システムは、アプリをスタンバイ モードに積極的に切り替えるのではなく、 アプリがアイドル状態になるのを 待たずに済みます
- バックグラウンド実行の制限は、ターゲット API に関係なく、すべてのアプリに適用されます できます。
- 画面がオフになると、位置情報サービスが無効化される場合があります。
- バックグラウンド アプリは、ネットワークにアクセスできません。
これ以外にも、デバイス固有の電力最適化があります。フル 詳しくは、電源管理について説明しているページを 制限します。
通常どおり、バッテリー セーバーがアクティブな状態でアプリをテストすることをおすすめします。マイページ バッテリー セーバーは、デバイスの [設定] >バッテリー セーバー画面。
テストとトラブルシューティング
新しい電源管理機能は、 アプリが Android 9 を対象としているかどうか。アプリを動作させるたびに 正しくインストールされています
さまざまな条件下でアプリの主なユースケースをテストして、 相互作用Android Debug Bridge コマンドを使用すると、 オフにすることもできます。
Android Debug Bridge コマンド
Android Debug Bridge のシェルコマンドを使用できます。 いくつかの電源管理機能をテストします。
ADB を使用してデバイスを Doze モードにする方法については、 Doze モードとアプリ スタンバイ モードでテストします。
アプリ スタンバイ バケット
ADB を使用すると、アプリをアプリ スタンバイ バケットに手動で割り当てることができます。 アプリのバケットを変更するには、次のコマンドを使用します。
$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare
このコマンドを使用して、複数のパッケージを一度に設定することもできます。
$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...
アプリが所属しているバケットを確認するには、次のコマンドを実行します。
$ adb shell am get-standby-bucket [packagename]
このコマンドで、packagename パラメータを渡さなかった場合、すべてのアプリのバケットがリストアップされます。また、
新しいメソッド
UsageStatsManager.getAppStandbyBucket()
。
バッテリー セーバー
低消費電力状態でアプリがどのように動作するかテストするコマンドがいくつか用意されています。
デバイスの電源を取り外すシミュレーションを行うには、次のコマンドを使用します。
$ adb shell dumpsys battery unplug
低電力状態でデバイスがどのように動作するかテストするには、次のコマンドを使用します。
$ adb shell settings put global low_power 1
テストが完了したら、手動のデバイス設定を元に戻す 以下のコマンドを使用します。
$ adb shell dumpsys battery reset