以前にも書きましたが、いろいろな節電処理が自動に行われているということで。
「電池の最適化」とは、バックグラウンド時にアプリを「スリープ」すること。
まずは、adb でカレントなステータスを確認したり、エミュレートしたりして自在に試してみることですよね。
以下の公式リファレンスベースに確認しながら関連の操作や語彙に馴染んでいきましょう。
👉 Doze とアプリ スタンバイ用に最適化する | Android デベロッパー | Android Developers
Dozeモード
端末を使っていなければアプリのバックグラウンド処理を保留する
アイドルモード開始
$ adb shell dumpsys deviceidle force-idle
アイドルモード終了
$ adb shell dumpsys deviceidle unforce
デバイスを再度アクティブにする
$ adb shell dumpsys battery reset
スタンバイモード
アプリを操作していなければ、そのアプリのバックグランド処理を保留します。
スタンバイモードにする
$ adb shell dumpsys battery unplug
$ adb shell am set-inactive {PACKAGENAME} true
アプリ復帰する
$ adb shell am set-inactive {PACKAGENAME} false
$ adb shell am get-inactive {PACKAGENAME}
👉 電源に関する問題をテストする | Android デベロッパー | Android Developers
アプリ スタンバイ バケット
各アプリは、その使用パターンに基づいて 5 つの優先度バケットのいずれかに振り分けられます。システムは、各アプリが入っているバケットに基づいて、そのアプリで使用できるデバイス リソースを制限します。
$ adb shell dumpsys battery unplug
$ adb shell am set-standby-bucket {PACKAGENAME} active|working_set|frequent|rare
$ adb shell am set-standby-bucket {PACKAGENAME1} {BUCKET1} {PACKAGENAME2} {BUCKET2}...
$ adb shell am get-standby-bucket [PACKAGENAME]
👉 アプリ スタンバイ バケット | Android デベロッパー | Android Developers
バックグラウンド制限
$ adb shell cmd appops set {PACKAGENAME} RUN_ANY_IN_BACKGROUND ignore
$ adb shell cmd appops set {PACKAGENAME} RUN_ANY_IN_BACKGROUND allow
バッテリーセーバー
$ adb shell dumpsys battery unplug
$ adb shell settings put global low_power 1
$ adb shell dumpsys battery reset
👉 電源管理に関する制限 | Android デベロッパー | Android Developers
バッテリー操作系
$ adb shell dumpsys battery
$ adb shell dumpsys battery -h
電源を抜く
$ adb shell dumpsys battery unplug
30%にセット
$ adb shell dumpsys battery set level 30
電源を元に戻す
$ adb shell dumpsys battery reset
まとめ
端末や対象のアプリそれぞれのステータスを確認しながら進むと良いででしょう。
$ adb shell dumpsys deviceidle
$ adb shell dumpsys battery
$ adb shell settings list {system|secure|global}
$ adb shell am get-inactive {PACKAGENAME}
$ adb shell am get-standby-bucket [PACKAGENAME]
$ adb shell cmd appops get {PACKAGENAME}
カレントな状態が目で見てはっきり分かると、
自然に次にやるべきことはきちんと見つかります。