De nieuwe achtergrondappbeperkingen van Android 12 kunnen een groot probleem zijn voor ervaren gebruikers die apps als Termux en misschien zelfs Tasker gebruiken.
Androïde 12 heeft veel veranderingen geïntroduceerd, hoewel ze niet allemaal echt op de gebruiker gericht zijn. Functies zoals het enorme Material You-herontwerp zijn duidelijk in je gezicht geschoven en moeilijk te missen, maar zoiets Digitale autosleutel ondersteuning kan gemakkelijker gemist worden. Eén verandering die misschien zelfs geheel ongedocumenteerd is, zal grote schade aanrichten aan apps als Termux, en dat is de introductie van een behoorlijk agressieve achtergrondprocesmoordenaar.
Ter context: Termux is een Linux-terminalemulator die je op Android kunt krijgen, en het pakketbeheer van Termux systeem lijkt veel op Debian's Advanced Package Tool (APT), in die zin dat u kunt zoeken, installeren en de-installeren met de commando geschikt. Termux installeert slechts een paar standaardpakketten uit de doos om de APK-grootte in de Play Store te verkleinen, maar staat dat wel toe
installeer eventuele extra pakketten dat jij verlangt. Mensen zullen Termux vaak gebruiken om van oudere smartphones miniservers te maken, of om andere programma's uit te voeren die doorgaans niet op smartphones zijn gericht. Een veelgebruikt gebruik is zelfs het standaard instellen van youtube-dl, omdat je Python-scripts kunt uitvoeren met Termux op je smartphone.In Android 12 echter het was ontdekt dat een mechanisme om gevorkte onderliggende processen te monitoren die door apps zijn gestart en deze doodt als ze te veel CPU verbruiken als de app op de achtergrond staat (via Mishaal Rahman) werd geïntroduceerd. Het beperkt ook het aantal onderliggende processen dat bovenliggende processen kunnen voortbrengen tot 32, wat het aantal bewerkingen dat een app op de achtergrond kan uitvoeren aanzienlijk beperkt. Deze limiet van 32 onderliggende processen geldt eigenlijk voor het hele systeem, niet alleen per app, wat betekent dat andere apps met onderliggende processen ook aan die limiet zullen bijdragen. Ik heb getest op de Google Pixel 6 Pro en ik kan bevestigen dat de PhantomProcess Killer bestaat en kan potentieel grote schade aanrichten aan Termux.
De Phantom Process Killer van Android 12 doodt achtergrondprocessen
Android 12 introduceerde een aantal beperkingen op achtergrondprocessen; de eerste is dat onderliggende processen van apps die op de achtergrond te veel CPU verbruiken, zullen worden beëindigd als het bovenliggende proces zich ook op de achtergrond bevindt. De tweede geïntroduceerde beperking is een limiet op het aantal onderliggende processen dat op een bepaald moment actief kan zijn. Van de geschiedenis begaanlijkt het erop dat Google frauduleuze achtergrondprocessen probeerde aan te pakken.
"Apps zouden Runtime.exec() kunnen gebruiken om onderliggende processen voort te brengen en het raamwerk heeft geen idee van de levenscyclus ervan. Volg nu deze processen wanneer we ze vinden - momenteel tijdens de bemonstering van de CPU-statistieken konden ze worden opgemerkt. Als het te veel CPU verbruikt terwijl het bovenliggende app-proces zich ook op de achtergrond bevindt, schakel het dan uit. Standaard staan we maximaal 32 van dergelijke processen toe; het proces met de slechtste oom adj-score van hun ouders zal worden gedood als er te veel van hen zijn."
Natuurlijk zijn Android-smartphones al berucht vanwege het doden van apps op de achtergrond. Vrijwel alle grote OEM's zijn er op de een of andere manier mee bezig, en bedrijven vinden dat leuk OnePlus, Samsung en Xiaomi worden als de slechtste beschouwd. Hoewel AOSP enkele beperkingen voor apps op de achtergrond kent, is het gebruikelijk dat fabrikanten hun eigen beperkingen bovenop AOSP bouwen. Dit zijn echter behoorlijk strikte beperkingen voor hoofdgebruikers en moedigen gedrag aan waar hoofdgebruikers zich al lange tijd uitgesproken tegen verzetten. Misschien zal het op de lange termijn de levensduur van de batterij verlengen, maar er is schijnbaar ook geen manier om het uit te schakelen.
Activering van de Android 12 Phantom Process Killer
Zoals de commit zegt, zijn 32 van dergelijke processen toegestaan, en ik heb dit op mijn Google Pixel 6 Pro geverifieerd met de volgende opdracht.
adb shell "/system/bin/dumpsys activity settings"
In de uitvoer van dit commando staat een constante genaamd "max_phantom_processes" met een waarde van 32. In deze context wordt een "fantoomproces" door het Android-systeem beoordeeld als een onderliggend proces dat op de achtergrond draait. Als u een Android 12-apparaat heeft, kunt u Termux gebruiken om meer dan 32 onderliggende processen voort te brengen ergens op uw opslag een bash-script maken met de volgende code en deze uitvoeren (dank aan agnostisch-apollo op GitHub, een ontwikkelaar betrokken bij Termux):
for i in $(seq 40); do
sha256sum /dev/zero &
done
Om het uit te voeren, navigeert u in Termux naar de map waarin u het script hebt opgeslagen en typt u het volgende:
shfilename.sh
Als uw telefoon traag aanvoelt, betekent dit dat hij werkt. De bovenstaande code genereert 40 sha256sum-bewerkingen op de achtergrond (aangegeven met het ampersand), waarbij de /dev/zero bestand als invoer. sha256sum geeft de SHA-256-hash van welk bestand dan ook als invoer wordt opgegeven. De reden /dev/zero wordt gebruikt, is dat het een bestand met een oneindige lengte is dat nulwaarden bevat zolang het wordt gelezen, wat betekent dat de De sha256sum-bewerking zal nooit het einde van het bestand bereiken en dient als een goede stresstest om een continue achtergrond te garanderen activiteiten.
Na een paar seconden tot een minuut kan het volgende verschijnen:
"signaal 9" is een signaal dat naar het proces wordt gestuurd waardoor het wordt gedwongen af te sluiten, en dit signaal wordt verzonden door de Linux-planner. De reden dat het bericht verschijnt is dat de bash-terminal technisch gezien ook een onderliggend proces van Termux is, en dat Android 12 uiteindelijk de bash-terminal doodt in de bovenstaande demonstratie. In de logcat-uitvoer ziet u het volgende:
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
De belangrijke regel is die waarin wordt vermeld dat het "bash"-proces werd ingekort en vervolgens stierf, en dat is de reden waarom Termux niet meer werkt. Hoewel ik niet zeker weet wat "nightwatch.txt" is, lijkt een vluchtige Google-zoekopdracht te suggereren dat het verband houdt met Facebook en Facebook Messenger, twee apps die ik wel heb geïnstalleerd. Ik heb dit getest terwijl de adaptieve batterij was uitgeschakeld en ervoor gezorgd dat er ook geen batterij-optimalisaties op Termux werden toegepast.
Nadat u klaar bent met testen, zullen sommige van de sha256sum-bewerkingen waarschijnlijk doorgaan in de achtergrond nog steeds (en door op Enter te drukken wordt Termux geforceerd afgesloten), dus open Termux opnieuw en typ het als vervolg op:
killall sha256sum
Hoewel een dergelijke beperking voor sommige apps zinvol is, zullen apps die door ervaren gebruikers eerder geneigd zijn te gebruiken (zoals Termux) daaronder lijden. Dit kan ook een effect hebben op andere apps die hoofdgebruikers ook gebruiken, zoals Tasker. Het is een beperking die nog niet lijkt te kunnen worden overwonnen en die nog meer beperkingen voor achtergrondapps introduceert, bovenop alle andere propriëtaire beperkingen die fabrikanten opleggen. In de lopende GitHub-probleemthread wordt het volgende vermeld door agnostic-apollo met betrekking tot een logcat die naar hen is gemaild:
"Alle 32 gevolgde logcat PhantomProcessRecord behoren tot com.wsandroid.suite en de bash van termux was een van de processen die werden beëindigd. Dus zoals hierboven vermeld, geldt de proceslimiet van 32 voor alle apps samen"
Grappig genoeg heb ik dezelfde tests uitgevoerd op een Xiaomi 11T Pro met Android 11 en heb ik bevestigd dat het gedrag niet bestaat op dat specifieke apparaat in die configuratie, ook al zijn Xiaomi-apparaten berucht om hun achtergrondapp beperkingen. Dit is, vreemd genoeg, een van de strengste beleidsmaatregelen voor achtergrondapplicatiebeheer die op elke Android-smartphone zijn geïntroduceerd, omdat er geen ontkomen aan is. Zelfs op Xiaomi-toestellen en OnePlus-toestellen is het mogelijk om dit uit te schakelen meest ervan, en voor sommige mensen is het uitschakelen van alle batterij-optimalisaties op die apparaten voldoende om gelukkig te zijn. De fantoomprocesmoordenaar kan daarentegen niet eens worden uitgeschakeld.
Als je op Termux vertrouwt voor veel bewerkingen op het apparaat die intensief zijn met veel achtergrondprocessen, kan het de moeite waard zijn om voorlopig te wachten met upgraden totdat er meer informatie is. Als u geen hoofdgebruiker bent, is dit waarschijnlijk niet iets waar u zich echt zorgen over hoeft te maken.