Die neuen Einschränkungen der Hintergrund-App von Android 12 könnten Power-Usern große Kopfschmerzen bereiten

Die neuen Einschränkungen für Hintergrund-Apps von Android 12 könnten Power-Usern, die Apps wie Termux und vielleicht sogar Tasker verwenden, große Kopfschmerzen bereiten.

Android 12 hat viele Änderungen eingeführt, von denen jedoch nicht alle wirklich benutzerorientiert sind. Features wie das massive Material, das Sie neu gestalten, werden Ihnen offensichtlich ins Gesicht gedrängt und sind kaum zu übersehen, aber so etwas in der Art Digitaler Autoschlüssel Unterstützung könnte leichter zu übersehen sein. Allerdings wird eine Änderung, die möglicherweise sogar völlig undokumentiert ist, verheerende Auswirkungen auf Apps wie Termux haben, und zwar die Einführung eines ziemlich aggressiven Prozesskillers im Hintergrund.

Zum Vergleich: Termux ist ein Linux-Terminal-Emulator, den Sie auf Android erhalten können, und die Paketverwaltung von Termux Das System ähnelt insofern dem Advanced Package Tool (APT) von Debian, als Sie mit dem suchen, installieren und deinstallieren können Befehl geeignet

. Termux installiert nur ein paar Basispakete sofort, um die APK-Größe im Play Store zu reduzieren, ermöglicht Ihnen dies jedoch Installieren Sie alle zusätzlichen Pakete das du dir wünschst. Menschen nutzen Termux häufig, um ältere Smartphones in Miniserver zu verwandeln oder um andere Programme auszuführen, die normalerweise nicht für Smartphones gedacht sind. Eine häufige Verwendung ist sogar die native Einrichtung von youtube-dl, da Sie Python-Skripte mit Termux auf Ihrem Smartphone ausführen können.

In Android 12 jedoch es wurde entdeckt dass ein Mechanismus zum Überwachen von gespaltenen untergeordneten Prozessen, die von Apps gestartet werden, und zum Beenden dieser Prozesse vorhanden ist, wenn sie zu viel CPU verbrauchen, wenn die App im Hintergrund läuft (via Mischaal Rahman) wurde vorgestellt. Außerdem wird die Anzahl der untergeordneten Prozesse, die von übergeordneten Prozessen erzeugt werden können, auf 32 begrenzt, wodurch die Anzahl der Vorgänge, die eine App im Hintergrund ausführen kann, erheblich eingeschränkt wird. Dieses Limit von 32 untergeordneten Prozessen gilt tatsächlich für das gesamte System und nicht nur pro App, was bedeutet, dass auch andere Apps mit untergeordneten Prozessen zu diesem Limit beitragen. Ich habe es auf dem Google Pixel 6 Pro getestet und kann das bestätigen PhantomProcessKiller existiert und kann möglicherweise verheerende Folgen für Termux haben.

Der Phantom Process Killer von Android 12 beendet Hintergrundprozesse

Mit Android 12 wurden einige Einschränkungen für Hintergrundprozesse eingeführt. Der erste besteht darin, dass untergeordnete Prozesse von Apps, die im Hintergrund zu viel CPU verbrauchen, beendet werden, wenn der übergeordnete Prozess ebenfalls im Hintergrund läuft. Die zweite eingeführte Einschränkung ist eine Begrenzung der Anzahl untergeordneter Prozesse, die zu einem bestimmten Zeitpunkt aktiv sein können. Von dem Commit-Geschichtescheint es, dass Google versucht hat, betrügerische Hintergrundprozesse einzudämmen.

„Apps könnten Runtime.exec() verwenden, um einen untergeordneten Prozess zu erzeugen, und das Framework hat keine Ahnung von seinem Lebenszyklus.“ Verfolgen Sie diese Prozesse nun, wann immer wir sie finden – derzeit könnten sie während der CPU-Statistik-Sampling entdeckt werden. Wenn es zu viel CPU verbraucht, während der übergeordnete App-Prozess ebenfalls im Hintergrund läuft, beenden Sie es. Standardmäßig erlauben wir bis zu 32 solcher Prozesse; Der Prozess mit der schlechtesten oom adj-Bewertung ihrer Eltern wird abgebrochen, wenn es zu viele von ihnen gibt.“

Natürlich sind Android-Smartphones bereits dafür berüchtigt, Apps im Hintergrund zu töten. Nahezu alle großen OEMs engagieren sich in irgendeiner Form oder Form darin, und Unternehmen mögen es OnePlus, Samsung und Xiaomi gelten als die schlechtesten. Während AOSP einige Hintergrund-App-Einschränkungen hat, ist es für Hersteller typisch, ihre eigenen Einschränkungen auf AOSP aufzubauen. Dabei handelt es sich jedoch um ziemlich strenge Beschränkungen für Power-User, die Verhaltensweisen fördern, gegen die Power-User schon lange lautstark protestieren. Vielleicht erhöht es auf lange Sicht die Akkulaufzeit, aber es gibt anscheinend auch keine Möglichkeit, es zu deaktivieren.

Auslösen des Android 12 Phantom Process Killer

Laut Commit sind 32 solcher Prozesse zulässig, und ich habe dies auf meinem Google Pixel 6 Pro mit dem folgenden Befehl überprüft.

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

In der Ausgabe dieses Befehls gibt es eine Konstante namens „max_phantom_processes“ mit einem Wert von 32. In diesem Zusammenhang wird ein „Phantomprozess“ vom Android-System als untergeordneter Prozess betrachtet, der im Hintergrund läuft. Wenn Sie ein Android 12-Gerät haben, können Sie Termux verwenden, um mehr als 32 untergeordnete Prozesse zu erzeugen Erstellen Sie irgendwo in Ihrem Speicher ein Bash-Skript, das den folgenden Code enthält, und führen Sie ihn aus (Anerkennung an Agnostiker-Apollo auf GitHub, einem Entwickler, der an Termux beteiligt ist):

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

Um es auszuführen, navigieren Sie in Termux zu dem Ordner, in dem Sie das Skript gespeichert haben, und geben Sie Folgendes ein:

shfilename.sh

Wenn sich Ihr Telefon langsam anfühlt, bedeutet das, dass es funktioniert. Der obige Code erzeugt 40 sha256sum-Vorgänge im Hintergrund (gekennzeichnet durch das kaufmännische Und-Zeichen), die das übernehmen /dev/zero Datei als Eingabe. sha256sum gibt den SHA-256-Hash jeder Datei aus, die als Eingabe angegeben wird. Der Grund /dev/zero verwendet wird, ist, dass es sich um eine Datei mit unendlicher Länge handelt, die solange Nullwerte enthält, wie sie gelesen wird, was bedeutet, dass die Der sha256sum-Vorgang erreicht nie das Ende der Datei und dient als guter Stresstest, um einen kontinuierlichen Hintergrund sicherzustellen Operationen.

Nach einigen Sekunden bis einer Minute wird möglicherweise Folgendes angezeigt:

„Signal 9“ ist ein Signal, das an den Prozess gesendet wird und ihn zum Herunterfahren zwingt. Dieses Signal wird vom Linux-Scheduler gesendet. Der Grund für die Meldung ist, dass das Bash-Terminal technisch gesehen ebenfalls ein untergeordneter Prozess von Termux ist und Android 12 in der obigen Demonstration das Bash-Terminal beendet. In der Logcat-Ausgabe können Sie Folgendes sehen:

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

Die wichtige Zeile ist diejenige, in der erwähnt wird, dass der „Bash“-Prozess gekürzt wurde und dann abstürzte, und dass Termux deshalb nicht mehr funktioniert. Obwohl ich nicht sicher bin, was „nightwatch.txt“ ist, deutet eine oberflächliche Google-Suche darauf hin, dass es mit Facebook und Facebook Messenger zusammenhängt, zwei Apps, die ich installiert habe. Ich habe dies mit ausgeschalteter adaptiver Batterie getestet und sichergestellt, dass auch bei Termux keine Batterieoptimierungen angewendet wurden.

Nachdem Sie den Test abgeschlossen haben, werden wahrscheinlich einige der sha256sum-Vorgänge im fortgesetzt Der Hintergrund bleibt bestehen (und durch Drücken der Eingabetaste wird das Schließen von Termux erzwungen). Öffnen Sie also Termux erneut und geben Sie Folgendes ein Folgendes:

killall sha256sum

Während eine solche Einschränkung für einige Apps sinnvoll ist, werden Apps, die Power-User möglicherweise eher verwenden (z. B. Termux), darunter leiden. Dies kann sich auch auf andere Apps auswirken, die Poweruser ebenfalls verwenden, wie z. B. Tasker. Es handelt sich um eine Einschränkung, die scheinbar noch nicht überwunden werden kann und zusätzlich zu allen anderen proprietären Einschränkungen, die die Hersteller auferlegen, noch mehr Einschränkungen für Hintergrund-Apps mit sich bringt. Im laufenden GitHub-Problemthread wird von agnostic-apollo Folgendes in Bezug auf einen Logcat erwähnt, der per E-Mail an sie gesendet wurde:

„Alle 32 verfolgten Logcat-PhantomProcessRecords gehören zu com.wsandroid.suite und Termuxs Bash war einer der Prozesse, die abgebrochen wurden. Wie oben erwähnt, gilt das Limit von 32 Prozessen für alle Apps zusammen.“

Lustigerweise habe ich die gleichen Tests auf einem Xiaomi 11T Pro mit Android 11 durchgeführt und bestätigt, dass das Verhalten nicht auftritt auf diesem bestimmten Gerät in dieser Konfiguration, obwohl Xiaomi-Geräte für ihre Hintergrund-App berüchtigt sind Einschränkungen. Dies ist seltsamerweise eine der strengsten Richtlinien für die Verwaltung von Hintergrundanwendungen, die auf jedem Android-Smartphone eingeführt wurden, denn daran führt kein Weg vorbei. Auch auf Xiaomi-Geräten und OnePlus-Geräten ist eine Deaktivierung möglich am meisten davon, und für einige Leute reicht es aus, alle Batterieoptimierungen auf diesen Geräten zu deaktivieren, um zufrieden zu sein. Im Gegensatz dazu kann der Phantom-Prozesskiller nicht einmal deaktiviert werden.

Wenn Sie sich für viele Vorgänge auf dem Gerät, die viele Hintergrundprozesse erfordern, auf Termux verlassen, kann es sich lohnen, das Upgrade vorerst zu verschieben, bis weitere Informationen vorliegen. Wenn Sie kein Power-User sind, müssen Sie sich darüber wahrscheinlich keine Sorgen machen.