Nove omejitve aplikacij v ozadju Androida 12 bi lahko bile velik glavobol za napredne uporabnike

Nove omejitve aplikacij v ozadju Androida 12 bi lahko bile velik glavobol za napredne uporabnike, ki uporabljajo aplikacije, kot sta Termux in morda celo Tasker.

Android 12 je uvedel veliko sprememb, čeprav vse niso zares namenjene uporabnikom. Funkcije, kot je ogromen material, ki ga preoblikujete, so očitno porinjene v obraz in jih je težko zgrešiti, a nekaj podobnega Digitalni avtomobilski ključ podporo morda lažje zamuditi. Vendar bo ena sprememba, ki je morda celo popolnoma nedokumentirana, povzročila opustošenje v aplikacijah, kot je Termux, in to je uvedba precej agresivnega ubijalca procesov v ozadju.

Za kontekst je Termux terminalski emulator Linuxa, ki ga lahko dobite v sistemu Android, in Termuxovo upravljanje paketov sistem je podoben Debianovemu naprednemu orodju za pakete (APT), saj lahko iščete, nameščate in odstranjujete z ukaz apt. Termux takoj namesti le nekaj osnovnih paketov, da zmanjša velikost APK-ja v Trgovini Play, vendar vam omogoča, namestite vse dodatne pakete ki si jih želiš. Ljudje bodo pogosto uporabili Termux za spreminjanje starejših pametnih telefonov v mini strežnike ali pa ga uporabili za zagon drugih programov, ki običajno niso namenjeni pametnim telefonom. Običajna uporaba je celo izvorna nastavitev youtube-dl, saj lahko izvajate skripte Python s Termuxom na vašem pametnem telefonu.

V Androidu 12 pa je bilo odkrito da mehanizem za spremljanje razcepljenih podrejenih procesov, ki jih zaženejo aplikacije, in jih uniči, če porabijo preveč CPE, če je aplikacija v ozadju (prek Mishaal Rahman) je bil predstavljen. Prav tako omejuje število podrejenih procesov, ki jih lahko ustvarijo nadrejeni procesi, na 32, kar močno omejuje število operacij, ki jih lahko aplikacija izvede v ozadju. Ta omejitev 32 podrejenih procesov dejansko velja za celoten sistem, ne le za posamezno aplikacijo, kar pomeni, da bodo k tej omejitvi prispevale tudi druge aplikacije s podrejenimi procesi. Preizkusil sem na telefonu Google Pixel 6 Pro in lahko potrdim, da je PhantomProcessKiller obstaja in lahko potencialno uniči Termux.

Phantom Process Killer sistema Android 12 uniči procese v ozadju

Android 12 je uvedel nekaj omejitev za procese v ozadju; prvi je, da bodo podrejeni procesi aplikacij, ki v ozadju porabijo preveč procesorja, uničeni, če je v ozadju tudi nadrejeni proces. Druga uvedena omejitev je omejitev števila podrejenih procesov, ki so lahko aktivni v danem trenutku. Iz zavezati zgodovino, se zdi, da je Google poskušal zajeziti lažne procese v ozadju.

"Aplikacije bi lahko uporabile Runtime.exec() za ustvarjanje podrejenega procesa in okvir ne bo imel pojma o njegovem življenjskem ciklu. Zdaj sledite tem procesom, kadar koli jih najdemo - trenutno med vzorčenjem statistike procesorja bi jih lahko opazili. Če porabi preveč procesorja, medtem ko je proces nadrejene aplikacije tudi v ozadju, ga ubijte. Privzeto dovolimo do 32 takih procesov; proces z najslabšo oceno oom adj njihovih staršev bo uničen, če jih bo preveč."

Seveda so pametni telefoni Android že razvpiti po ubijanju aplikacij v ozadju. Skoraj vsi glavni proizvajalci originalne opreme sodelujejo pri tem na nek način, v obliki ali obliki in podjetjem všeč OnePlus, Samsung in Xiaomi veljajo za najslabše. Medtem ko ima AOSP nekatere omejitve aplikacij v ozadju, je za proizvajalce značilno, da zgradijo lastne omejitve na vrhu AOSP. Vendar so to precej stroge omejitve za izkušene uporabnike in spodbujajo vedenje, ki so mu izkušeni uporabniki dolgo časa glasno nasprotovali. Morda bo dolgoročno podaljšal življenjsko dobo baterije, vendar se zdi, da tudi tega ni mogoče onemogočiti.

Sprožitev Android 12 Phantom Process Killer

Kot pravi potrditev, je dovoljenih 32 takšnih procesov in to sem preveril na svojem Google Pixel 6 Pro z naslednjim ukazom.

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

V izhodu tega ukaza je konstanta z imenom "max_phantom_processes" z vrednostjo 32. V tem kontekstu sistem Android oceni "fantomski proces" kot podrejeni proces, ki se izvaja v ozadju. Če imate napravo Android 12, lahko uporabite Termux za ustvarjanje več kot 32 podrejenih procesov ustvarjanje bash skripta nekje v vašem pomnilniku, ki vsebuje naslednjo kodo, in njeno izvajanje (krediti za agnostik-apolon na GitHubu, razvijalcu, ki sodeluje pri Termuxu):

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

Če ga želite izvesti, se v Termuxu pomaknite do mape, v katero ste shranili skript, in vnesite naslednje:

shfilename.sh

Če vaš telefon začne zaostajati, to pomeni, da deluje. Zgornja koda sproži 40 operacij sha256sum v ozadju (označenih z ampersandom), pri čemer /dev/zero datoteko kot vhod. sha256sum bo dal zgoščeno vrednost SHA-256 katere koli datoteke, ki je dana kot vhod. Razlog /dev/zero se uporablja, da je datoteka neskončne dolžine, ki vsebuje ničelne vrednosti, dokler je prebrana, kar pomeni, da operacija sha256sum ne bo nikoli dosegla konca datoteke, kar služi kot dober stresni test za zagotavljanje neprekinjenega ozadja operacije.

Po nekaj sekundah do minuti se lahko prikaže naslednje:

"signal 9" je signal, poslan procesu, ki ga prisili v zaustavitev, in ta signal pošlje razporejevalnik Linuxa. Razlog za to sporočilo je, da je terminal bash tehnično tudi podrejeni proces Termuxa, Android 12 pa na koncu ubije terminal bash v zgornji predstavitvi. V izhodu logcat lahko vidite naslednje:

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

Pomembna vrstica je tista, ki omenja, da je bil proces "bash" obrezan in nato zamrl, zato Termux preneha delovati. Čeprav nisem prepričan, kaj je "nightwatch.txt", se zdi, da bežno iskanje v Googlu nakazuje, da je povezano s Facebookom in Facebook Messengerjem, dvema aplikacijama, ki ju imam nameščen. To sem preizkusil z izklopljeno prilagodljivo baterijo in se prepričal, da tudi za Termux ni bilo uporabljenih optimizacij baterije.

Ko končate s testiranjem, se bodo nekatere operacije sha256sum verjetno nadaljevale v še vedno v ozadju (in s pritiskom na enter se Termux prisilno zapre), zato znova odprite Termux in vnesite naslednje:

killall sha256sum

Čeprav je takšna omejitev smiselna za nekatere aplikacije, bodo trpele aplikacije, ki bi jih bolj radi uporabljali izkušeni uporabniki (na primer Termux). To lahko vpliva tudi na druge aplikacije, ki jih uporabljajo tudi napredni uporabniki, kot je Tasker. To je omejitev, ki se je še ne zdi mogoče premagati in uvaja še več omejitev za aplikacije v ozadju poleg vseh drugih lastniških omejitev, ki jih postavljajo proizvajalci. V trenutni temi vprašanj GitHub je agnostic-apollo omenil naslednje v zvezi z logcatom, ki jim je bil poslan po e-pošti:

»Vseh 32 sledenih logcat PhantomProcessRecord pripada com.wsandroid.suite in termuxov bash je bil eden od procesov, ki so bili uničeni. Torej, kot je omenjeno zgoraj, je omejitev 32 procesov za vse aplikacije skupaj."

Zabavno, iste teste sem izvedel na Xiaomi 11T Pro z Androidom 11 in potrdil, da vedenje ne obstaja na določeni napravi v tej konfiguraciji, čeprav so naprave Xiaomi razvpite po aplikaciji v ozadju omejitve. Nenavadno je to eden najstrožjih pravilnikov o upravljanju aplikacij v ozadju, uvedenih na katerem koli pametnem telefonu Android, saj ga ni mogoče zaobiti. Tudi v napravah Xiaomi in OnePlus je to mogoče onemogočiti večina in za nekatere ljudi je dovolj, da so zadovoljni, če onemogočijo vse optimizacije baterije na teh napravah. Nasprotno pa fantomskega ubijalca procesov ni mogoče niti onemogočiti.

Če se zanašate na Termux pri številnih operacijah v napravi, ki so intenzivne s številnimi procesi v ozadju, je morda vredno odložiti nadgradnjo, dokler ne bo več informacij. Če niste izkušen uporabnik, potem to verjetno ni nekaj, kar bi vas res moralo skrbeti.