Android 12 の新しいバックグラウンド アプリの制限は、パワー ユーザーにとって大きな頭痛の種になる可能性があります

Android 12 の新しいバックグラウンド アプリの制限は、Termux やおそらく Tasker などのアプリを使用するパワー ユーザーにとって大きな頭痛の種になる可能性があります。

アンドロイド12 では多くの変更が導入されましたが、そのすべてが実際にユーザーにとって役立つわけではありません。 再設計した巨大なマテリアルのような機能は、明らかに目の前に押し出されており、見逃すのは難しいですが、次のようなものです。 車のデジタルキー サポートは見逃しやすいかもしれません。 ただし、完全に文書化されていない可能性がある変更が 1 つあり、Termux のようなアプリに大混乱を引き起こす可能性があります。それは、かなり攻撃的なバックグラウンド プロセス キラーの導入です。

参考までに、Termux は Android で入手できる Linux ターミナル エミュレーターであり、Termux のパッケージ管理について説明します。 このシステムは、Debian の Advanced Package Tool (APT) とよく似ており、 指示 適切な. Termux は、Play ストアの APK サイズを削減するために、すぐに使える基本パッケージをいくつかインストールしますが、次のことが可能です。 追加のパッケージをインストールする あなたが望んでいること。 多くの場合、Termux を利用して古いスマートフォンをミニサーバーに変えたり、通常はスマートフォンを対象としていない他のプログラムを実行したりすることがあります。 一般的な使用法としては、スマートフォン上で Termux を使用して Python スクリプトを実行できるため、youtube-dl をネイティブにセットアップすることもできます。

ただし、Android 12 では、 それは発見されました アプリによって開始されたフォークされた子プロセスを監視し、アプリがバックグラウンドにある場合に CPU を消費しすぎるとプロセスを強制終了するメカニズム ミシャール・ラーマン)が紹介されました。 また、親プロセスが生成できる子プロセスの数も 32 に制限され、アプリがバックグラウンドで完了できる操作の数が大幅に制限されます。 この 32 個の子プロセスの制限は、実際にはアプリごとではなくシステム全体に適用されます。つまり、子プロセスを持つ他のアプリもその制限に影響を与えることになります。 Google Pixel 6 Pro でテストしたところ、

ファントムプロセスキラー が存在し、Termux に大混乱を引き起こす可能性があります。

Android 12 のファントム プロセス キラーはバックグラウンド プロセスを強制終了します

Android 12 では、バックグラウンド プロセスにいくつかの制限が導入されました。 1 つ目は、親プロセスもバックグラウンドにある場合、バックグラウンドで CPU を過剰に消費するアプリの子プロセスが強制終了されることです。 導入される 2 番目の制限は、いつでもアクティブにできる子プロセスの数の制限です。 から コミット履歴、Googleは不正なバックグラウンドプロセスを取り締まろうとしているように見えます。

「アプリは Runtime.exec() を使用して子プロセスを生成する可能性があり、フレームワークはそのライフサイクルについてまったく知りません。 プロセスが見つかるたびに追跡するようになりました。現時点では、CPU 統計のサンプリング中にそれらのプロセスが検出される可能性があります。 親アプリのプロセスもバックグラウンドにあるときに CPU を大量に消費している場合は、それを強制終了します。 デフォルトでは、このようなプロセスは最大 32 個まで許可されます。 親の oom adj スコアが最も悪いプロセスは、親が多すぎる場合に強制終了されます。」

もちろん、Android スマートフォンはバックグラウンドでアプリを強制終了することですでに悪名が高いです。 ほぼすべての主要な OEM が何らかの方法、形、形式でそれに取り組んでいます。 OnePlus、Samsung、Xiaomi は最悪のグループの 1 つと考えられています. AOSP にはバックグラウンド アプリの制限がいくつかありますが、メーカーが AOSP に加えて独自の制限を構築するのが一般的です。 ただし、これらはパワー ユーザーにとっては非常に厳しい制限であり、パワー ユーザーが長い間声高に反対してきた行動を奨励します。 おそらく、長期的にはバッテリー寿命が延びるでしょうが、無効にする方法もないようです。

Android 12 ファントム プロセス キラーのトリガー

コミットに記載されているように、32 のそのようなプロセスが許可されており、次のコマンドを使用して Google Pixel 6 Pro でこれを確認しました。

adb shell "/system/bin/dumpsys activity settings"

このコマンドの出力には、値が 32 の「max_phantom_processes」という定数があります。 ここで、「ファントム プロセス」は Android システムによってバックグラウンドで実行されている子プロセスであると判断されます。 Android 12 デバイスをお持ちの場合は、Termux を使用して、次のように 32 を超える子プロセスを生成できます。 次のコードを含む bash スクリプトをストレージ上のどこかに作成し、実行します。 (クレジットは 不可知論者アポロ GitHub 上 (Termux に関わる開発者):

for i in $(seq 40); do
sha256sum /dev/zero &
done

これを実行するには、Termux でスクリプトを保存したフォルダーに移動し、次のように入力します。

shfilename.sh

携帯電話の動作が遅いと感じ始めたら、それは正常に動作していることを意味します。 上記のコードは、バックグラウンドで 40 個の sha256sum 演算を生成します (アンパサンドで示されます)。 /dev/zero ファイルを入力として使用します。 sha256sum は、入力として指定されたファイルの SHA-256 ハッシュを返します。 理由 /dev/zero 使用されるのは、読み取られる限り null 値が含まれる無限長のファイルであるということです。 sha256sum 操作はファイルの最後に到達することはなく、継続的なバックグラウンドを確認するための優れたストレス テストとして機能します。 オペレーション。

数秒から 1 分後に、次のようなメッセージが表示される場合があります。

「シグナル 9」は、プロセスを強制的にシャットダウンするためにプロセスに送信されるシグナルであり、このシグナルは Linux スケジューラーによって送信されます。 このメッセージが表示される理由は、bash ターミナルも技術的には Termux の子プロセスであり、上記のデモでは Android 12 が bash ターミナルを強制終了してしまうためです。 logcat の出力では、次のことがわかります。

11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.507 1444 1762 I ActivityManager: Killing PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340}: Trimming phantom processes
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {b160bd5 27316:27269:bash/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {9cf12db 27372:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {414579a 27434:27269:top/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {32cc242 27379:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bbc1fea 27371:27269:sha256sum/u0a340} died
11-02 13:01:52.511 1444 1764 I ActivityManager: Process PhantomProcessRecord {bf3d88c 24220:24040:nightwatch.txt/u0a237} died
11-02 13:01:52.512 1444 1764 I ActivityManager: Process PhantomProcessRecord {60aad24 27377:27269:sha256sum/u0a340} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {623260a 7362:7284:nightwatch.txt/u0a227} died
11-02 13:01:52.516 1444 1764 I ActivityManager: Process PhantomProcessRecord {124e08d 27378:27269:sha256sum/u0a340} died
11-02 13:01:52.517 1444 1764 I ActivityManager: Process PhantomProcessRecord {fb89051 27374:27269:sha256sum/u0a340} died
11-02 13:01:52.519 1444 1764 I ActivityManager: Process PhantomProcessRecord {54bf178 27373:27269:sha256sum/u0a340} died
11-02 13:01:52.532 1444 1764 I ActivityManager: Process PhantomProcessRecord {2a201b7 27376:27269:sha256sum/u0a340} died
11-02 13:01:52.545 1444 1764 I ActivityManager: Process PhantomProcessRecord {d3450b6 27375:27269:sha256sum/u0a340} died

重要な行は、「bash」プロセスがトリミングされて終了し、それが Termux が動作しなくなる理由であると述べている行です。 「nightwatch.txt」が何であるかはわかりませんが、ざっと Google 検索すると、これは私がインストールしている 2 つのアプリである Facebook と Facebook Messenger に関連しているようです。 アダプティブ バッテリーをオフにしてこれをテストし、Termux にもバッテリーの最適化が適用されていないことを確認しました。

テストが終了した後、sha256sum 操作の一部が継続される可能性があります。 背景がまだ残っているので (Enter キーを押すと Termux が強制的に閉じられます)、Termux を再度開き、次のように入力します。 続く:

killall sha256sum

このような制限は一部のアプリでは理にかなっていますが、パワーユーザーがより使用する可能性のあるアプリ (Termux など) には問題が発生します。 これは、Tasker など、パワー ユーザーが使用する他のアプリにも影響を与える可能性があります。 これはまだ克服することが不可能と思われる制限であり、メーカーが課す他の独自の制限に加えて、バックグラウンド アプリにさらに多くの制限が導入されます。 現在進行中の GitHub の問題スレッドでは、電子メールで送信された logcat に関して agnostic-apollo によって次のことが言及されています。

「追跡された 32 個の logcat PhantomProcessRecord はすべて com.wsandroid.suite に属しており、termux の bash は強制終了されたプロセスの 1 つでした。 したがって、上で述べたように、32 プロセスの制限はすべてのアプリを合わせたものです。」

面白いことに、Android 11 を実行している Xiaomi 11T Pro で同じテストを実行し、その動作が存在しないことを確認しました。 Xiaomi デバイスはバックグラウンド アプリで悪名高いにもかかわらず、その構成の特定のデバイス上で 制限。 奇妙なことに、これは Android スマートフォンに導入された最も厳格なバックグラウンド アプリケーション管理ポリシーの 1 つであり、これを回避する方法はありません。 Xiaomi デバイスや OnePlus デバイスでも、無効にすることが可能です ほとんど 一部の人々にとっては、それらのデバイスのバッテリー最適化をすべて無効にするだけで十分です。 対照的に、ファントム プロセス キラーは無効にすることさえできません。

多くのバックグラウンド プロセスを伴う集中的なデバイス上の操作の多くを Termux に依存している場合は、さらなる情報が得られるまで、今のところアップグレードを保留する価値があるかもしれません。 パワー ユーザーではない場合、これは特に心配する必要はないでしょう。