備忘録

気になったことを残しておきます。

android12 の タスクキル 対策について

2022-10-14 13:47:10 | 日記

AQUOSスマホ(sense4)をandroid12にアップデートした直後からポケモンGOの再起動が多発するようになった。
再起動するタイミングは、ゲーム中に画面を切り替えてLineを見たりした場合。
すなわち、一旦ポケモンGOがバックグラウンドとなり、再度切り替えた際に問題が発生する。

android11に戻せば問題は解決するが、戻すのはかなりハードルが高い。スマホがPixelならばOSイメージが公開されていてダウングレードできるかも知れないが、AQUOSではムリ。前に進むしか無い。

色々調べたところ、android12からパフォーマンス向上のため PhantomProcessKiller という機能(タスクキル)が追加されているとのこと。バックグラウンドで動いているCPU負荷の高いアプリを強制終了させたり(問題1)、バックグラウンドのタスクを32までに制限し、それ以上になった場合、タスクをバッサバッサと停止させている(問題2)とのこと。

問題1に関しては根本的な対策は見つけられていないが、設定画面→アプリでタスクキルされるアプリのバッテリ設定を「制限なし」に設定することにより、多少は軽減できるようだ。加えてスマホのマルチウインドウ設定等の対応を行えば多少はマシになるが、ポケモンGOはマルチウインドウには正式対応していないので、有効となるケース(フォアグラウンドになるアプリがマルチウィンドウ対応時のみ)も限られ、この設定のみでは結構ストレスだった。

問題2に関しては、スマホを開発者オプションにしてデバッグモードに変更後、PCと接続し、PCからadbというツールでこの値を大きくすることで改善できそうだ。機能自体の無効化はandroid13まで待つ必要があるようだ。
対策の見つけられていない問題1もあるため、32を超えるタスクの制限対策を実施してもバックグラウンドの動きはandroid11とは同じ動きにはできてないが、上記タスク数制限対策を行い、かつスマホのマルチウインドウ設定を追加してからは自分の環境下では許容範囲レベルまで落ち着いている。また、この設定を行った後でもandroid11の頃よりパフォーマンスも良くなっているような気がする。
参考までに、この制限タスク数変更の方法を記載しておく。

 ※実施する場合は自己責任で!!

0)設定画面→アプリでタスクキルされるアプリのバッテリ設定を「制限なし」に設定する(未実施の場合)

1)スマホのドライバーをPCに導入
 AQUOS用のドライバーは以下
 https://k-tai.sharp.co.jp/support/developers/driver/index.html

2)PCにて以下対応を実施する
 https://www.orefolder.net/2017/03/platform-tools/

3)スマホの開発者向けオプションを有効化し設定

 3-1)「USBデバッグ」をONにする
 https://developer.android.com/studio/debug/dev-options?hl=ja

 3-2)マルチウインドウ対応(※希望があれば)
 https://www.teradas.net/archives/27229/

4)PCとスマホをType-Cケーブルで接続

5)Windows PowerShellを管理者として起動し、以下を実施

 5-1)現在の設定値を確認
> adb shell "/system/bin/dumpsys activity settings | grep max_phantom_processes"
 max_phantom_processes=32 とでてくるはず

 5-2)設定値を大きくする
> adb shell "/system/bin/device_config put activity_manager max_phantom_processes 384"
 AQUOSではエモパー等バックグラウンドプロセスが多めなので多めにしたほうが良さそう。
 自分の環境下では256以上ないと効果は薄かった。
 ちなみに、最大値は2147483647。
 大きすぎると他への影響もあるかも知れないので注意が必要。
> adb shell "/system/bin/dumpsys activity settings | grep max_phantom_processes"
 にて設定値を確認する。 

 5-3)再起動してもデフォルトに戻らないよう設定値を固定化
  (再起動時に行われるデバイス構成の同期を無効化)
> adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent"

 ※上記コマンドにてデバイス構成の同期を無効にすると、Androidがクラッシュ、
  ブートループ、および不正な構成から回復できなくなる可能性がある。
  デフォルト設定を復元するには以下のコマンドでデバイス構成の同期を有効にする。

> adb shell "/system/bin/device_config set_sync_disabled_for_tests none"

 5-4)上記確認
> adb shell "/system/bin/device_config is_sync_disabled_for_tests"
 trueが戻ってきたら設定完了

 元に戻す時は以下を実施
> adb shell "/system/bin/device_config set_sync_disabled_for_tests none"

> adb shell "/system/bin/device_config put activity_manager max_phantom_processes 32"
> adb shell "/system/bin/device_config is_sync_disabled_for_tests"
 falseが戻ってきたら設定完了

 5-5)Type-Cケーブルを抜いて、スマホのデバッグモードをオフにし、念のためスマホを再起動

                              以上



コメントを投稿