Android 12s nye bakgrunnsappbegrensninger kan være en stor hodepine for superbrukere

Android 12s nye bakgrunnsappbegrensninger kan være en stor hodepine for avanserte brukere som bruker apper som Termux og kanskje til og med Tasker.

Android 12 har introdusert mange endringer, selv om ikke alle er brukervennlige. Funksjoner som det massive Material You redesign er åpenbart dyttet i ansiktet ditt og vanskelig å gå glipp av, men noe sånt Digital bilnøkkel støtte kan være lettere å gå glipp av. En endring som til og med kan være helt udokumentert vil imidlertid skape kaos på apper som Termux, og det er introduksjonen av en ganske aggressiv bakgrunnsprosessmorder.

For kontekst er Termux en Linux-terminalemulator som du kan få på Android, og Termuxs pakkehåndtering systemet ligner mye på Debians avanserte pakkeverktøy (APT) ved at du kan søke, installere og avinstallere med kommando apt. Termux installerer bare noen få grunnleggende pakker ut av esken, for å redusere APK-størrelsen på Play Store, men lar deg installere eventuelle ekstra pakker som du ønsker. Folk vil ofte bruke Termux for å gjøre eldre smarttelefoner om til miniservere, eller bruke det til å kjøre andre programmer som vanligvis ikke er rettet mot smarttelefoner. En vanlig bruk er til og med å sette opp youtube-dl, ettersom du kan utføre Python-skript ved å bruke Termux på smarttelefonen din.

I Android 12 derimot, det ble oppdaget at en mekanisme for å overvåke forked child-prosesser startet av apper og dreper dem hvis de bruker for mye CPU hvis appen er i bakgrunnen (via Mishaal Rahman) Ble introdusert. Det begrenser også antallet underordnede prosesser som overordnede prosesser kan skape til 32, noe som i stor grad begrenser antallet operasjoner en app kan fullføre i bakgrunnen. Denne grensen på 32 underordnede prosesser er faktisk over hele systemet, ikke bare per app, noe som betyr at andre apper med underordnede prosesser også vil bidra til den grensen. Jeg testet på Google Pixel 6 Pro, og jeg kan bekrefte at PhantomProcessKiller eksisterer og kan potensielt skape kaos på Termux.

Android 12s Phantom Process Killer dreper bakgrunnsprosesser

Android 12 introduserte et par restriksjoner på bakgrunnsprosesser; den første er at underordnede prosesser til apper som bruker for mye CPU i bakgrunnen vil bli drept hvis foreldreprosessen også er i bakgrunnen. Den andre begrensningen som er innført er en begrensning på antall underordnede prosesser som kan være aktive til enhver tid. Fra begå historie, ser det ut til at Google prøvde å slå ned på useriøse bakgrunnsprosesser.

"Apper kan bruke Runtime.exec() for å skape underordnede prosesser, og rammeverket har ingen anelse om livssyklusen. Spor nå disse prosessene når vi finner dem - for øyeblikket under prøvetakingen av CPU-statistikken kan de bli oppdaget. Hvis den bruker for mye CPU mens den overordnede app-prosessen også er i bakgrunnen, drep den. Som standard tillater vi opptil 32 slike prosesser; prosessen med den dårligste oom adj-poengsummen til foreldrene deres vil bli drept hvis det er for mange av dem."

Selvfølgelig er Android-smarttelefoner allerede beryktet for bakgrunnsapp-drap. Stort sett alle store OEM-er engasjerer seg i det på en eller annen måte, form eller form, og selskaper liker det OnePlus, Samsung og Xiaomi regnes blant de verste. Mens AOSP har noen bakgrunnsappbegrensninger, er det typisk for produsenter å bygge sine egne begrensninger på toppen av AOSP. Dette er imidlertid ganske strenge begrensninger for strømbrukere og oppmuntrer til atferd som strømbrukere har vært vokalt imot i lang tid. Kanskje det vil øke batterilevetiden i det lange løp, men det er tilsynelatende ingen måte å deaktivere det heller.

Utløser Android 12 Phantom Process Killer

Som forpliktelsen sier, er 32 slike prosesser tillatt, og jeg bekreftet dette på min Google Pixel 6 Pro med følgende kommando.

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

I utdataene til denne kommandoen er det en konstant kalt "max_phantom_processes" med en verdi på 32. I denne sammenhengen bedømmes en "fantomprosess" av Android-systemet til å være en barneprosess som kjører i bakgrunnen. Hvis du har en Android 12-enhet, kan du bruke Termux til å skape mer enn 32 underordnede prosesser ved å lage et bash-skript et sted på lageret ditt som inneholder følgende kode og kjøre det (kreditter til agnostiker-apollo på GitHub, en utvikler involvert i Termux):

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

For å utføre det, i Termux naviger til mappen du lagret skriptet i og skriv inn følgende:

shfilename.sh

Hvis telefonen begynner å føles etterslep, betyr det at den fungerer. Koden ovenfor skaper 40 sha256sum-operasjoner i bakgrunnen (angitt med og-tegnet) med /dev/zero fil som input. sha256sum vil gi SHA-256-hashen til hvilken fil som er gitt som input. Grunnen /dev/zero brukes er at det er en uendelig lang fil som inneholder nullverdier så lenge den er lest, noe som betyr at sha256sum-operasjonen vil aldri nå slutten av filen, og fungerer som en god stresstest for å sikre kontinuerlig bakgrunn operasjoner.

Etter noen sekunder til ett minutt kan du få følgende til å vises:

"signal 9" er et signal sendt til prosessen som tvinger den til å slå seg av, og dette signalet sendes av Linux-planleggeren. Grunnen til at meldingen vises er at bash-terminalen teknisk sett også er en barneprosess av Termux, og Android 12 ender opp med å drepe bash-terminalen i demonstrasjonen ovenfor. I logcat-utgangen kan du se følgende:

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

Den viktige linjen er den som nevner at "bash"-prosessen ble trimmet og deretter døde, og det er derfor Termux slutter å virke. Selv om jeg er usikker på hva "nightwatch.txt" er, ser det ut til at et overfladisk Google-søk antyder at det er relatert til Facebook og Facebook Messenger, to apper jeg har installert. Jeg testet dette med adaptivt batteri av og sørget for at det heller ikke ble brukt batterioptimaliseringer på Termux.

Etter at du er ferdig med å teste, er det sannsynlig at noen av sha256sum-operasjonene vil fortsette i bakgrunnsbilde (og å trykke enter vil tvinge til å lukke Termux), så åpne Termux på nytt og skriv inn følgende:

killall sha256sum

Selv om en slik begrensning gir mening for noen apper, vil apper som avanserte brukere kan være mer tilbøyelige til å bruke (som Termux) lide. Dette kan også ha en effekt på andre apper som superbrukere også bruker, for eksempel Tasker. Det er en begrensning som ikke ser ut til å være mulig å overvinne ennå og introduserer enda flere begrensninger på bakgrunnsapper på toppen av alle de andre proprietære restriksjonene som produsentene pålegger. I den pågående GitHub-problemtråden nevnes følgende av agnostic-apollo angående en logcat som ble sendt til dem:

"Alle de 32 sporede logcat PhantomProcessRecord tilhører com.wsandroid.suite og termuxs bash var en av prosessene som ble drept. Så som nevnt ovenfor, er 32 prosessgrensen for alle apper kombinert"

Morsomt nok kjørte jeg de samme testene på en Xiaomi 11T Pro som kjører Android 11 og bekreftet at oppførselen ikke eksisterer på den aktuelle enheten i den konfigurasjonen, selv om Xiaomi-enheter er beryktet for bakgrunnsapper begrensninger. Dette er merkelig nok en av de strengeste retningslinjer for bakgrunnsapplikasjonsadministrasjon som er introdusert på enhver Android-smarttelefon, siden det ikke er noen vei utenom det. Selv på Xiaomi-enheter og OnePlus-enheter er det mulig å deaktivere mest av det, og for noen mennesker er det nok å deaktivere alle batterioptimaliseringer på disse enhetene for at de skal være fornøyde. Fantomprosessmorderen, derimot, kan ikke engang deaktiveres.

Hvis du er avhengig av Termux for mange operasjoner på enheten som er intensive med mange bakgrunnsprosesser, kan det være verdt å vente med å oppgradere til det er mer informasjon. Hvis du ikke er en superbruker, er dette sannsynligvis ikke noe du virkelig trenger å bekymre deg for.