Nova ograničenja pozadinskih aplikacija Androida 12 mogla bi biti velika glavobolja naprednim korisnicima

Nova ograničenja pozadinskih aplikacija Androida 12 mogla bi biti velika glavobolja naprednim korisnicima koji koriste aplikacije poput Termuxa, a možda čak i Taskera.

Android 12 je uveo mnogo promjena, iako nisu sve one namijenjene korisnicima. Značajke poput masivnog materijala koji ste redizajnirali očito su vam gurnute u lice i teško ih je propustiti, ali nešto poput Digitalni ključ automobila možda je lakše propustiti podršku. Međutim, jedna promjena koja bi mogla biti čak i potpuno nedokumentirana izazvat će pustoš u aplikacijama poput Termuxa, a to je uvođenje prilično agresivnog ubojice pozadinskih procesa.

Za kontekst, Termux je emulator Linux terminala koji možete dobiti na Androidu i Termuxovo upravljanje paketima sustav je sličan Debianovom Advanced Package Tool (APT) po tome što možete pretraživati, instalirati i deinstalirati s naredba prikladan. Termux odmah instalira samo nekoliko osnovnih paketa kako bi smanjio veličinu APK-a u Trgovini Play, ali vam omogućuje instalirajte sve dodatne pakete

koje želite. Ljudi će često koristiti Termux za pretvaranje starijih pametnih telefona u mini poslužitelje ili ga koristiti za pokretanje drugih programa koji obično nisu namijenjeni pametnim telefonima. Uobičajena upotreba je čak i nativno postavljanje youtube-dl-a, budući da možete izvršavati Python skripte koristeći Termux na svom pametnom telefonu.

U Androidu 12, međutim, otkriveno je taj mehanizam za nadzor račvanih podređenih procesa koje pokreću aplikacije i ubija ih ako troše previše CPU-a ako je aplikacija u pozadini (putem Mishaal Rahman) je uveden. Također ograničava broj podređenih procesa koje roditeljski procesi mogu proizvesti na 32, što uvelike ograničava broj operacija koje aplikacija može izvršiti u pozadini. Ovo ograničenje od 32 podređena procesa zapravo je u cijelom sustavu, a ne samo po aplikaciji, što znači da će i druge aplikacije s podređenim procesima pridonijeti tom ograničenju. Testirao sam na Google Pixelu 6 Pro i mogu potvrditi da je PhantomProcessKiller postoji i potencijalno može izazvati pustoš u Termuxu.

Phantom Process Killer za Android 12 ubija pozadinske procese

Android 12 uveo je nekoliko ograničenja za pozadinske procese; prvi je da će podređeni procesi aplikacija koje troše previše CPU-a u pozadini biti ubijeni ako je roditeljski proces također u pozadini. Drugo uvedeno ograničenje je ograničenje broja podređenih procesa koji mogu biti aktivni u bilo kojem trenutku. Od počiniti povijest, čini se da Google pokušava suzbiti lažne pozadinske procese.

"Aplikacije bi mogle koristiti Runtime.exec() za stvaranje podređenog procesa i okvir neće imati pojma o njegovom životnom ciklusu. Sada pratimo te procese kad god ih pronađemo - trenutno tijekom uzorkovanja CPU statistike mogli bi biti uočeni. Ako troši previše CPU-a dok je proces nadređene aplikacije također u pozadini, ubijte ga. Prema zadanim postavkama dopuštamo do 32 takva procesa; proces s najgorim oom adj rezultatom njihovih roditelja bit će ubijen ako ih je previše."

Naravno, Android pametni telefoni već su poznati po ubijanju pozadinskih aplikacija. Skoro svi glavni proizvođači originalne opreme sudjeluju u tome na neki način, oblik ili oblik, a tvrtke to vole OnePlus, Samsung i Xiaomi smatraju se među najgorima. Iako AOSP ima neka ograničenja za pozadinske aplikacije, tipično je da proizvođači grade vlastita ograničenja povrh AOSP-a. Međutim, to su prilično stroga ograničenja za iskusne korisnike i potiču ponašanja protiv kojih se iskusni korisnici dugo vremena protive. Možda će dugoročno produžiti trajanje baterije, ali naizgled ne postoji način da se to onemogući.

Pokretanje Android 12 Phantom Process Killera

Kao što stoji u obvezi, dopuštena su 32 takva procesa, a to sam potvrdio na svom Google Pixel 6 Pro sljedećom naredbom.

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

U izlazu ove naredbe nalazi se konstanta pod nazivom "max_phantom_processes" s vrijednošću 32. U tom kontekstu, sustav Android ocjenjuje "fantomski proces" kao podređeni proces koji se izvodi u pozadini. Ako imate Android 12 uređaj, možete koristiti Termux za stvaranje više od 32 podređena procesa stvaranje bash skripte negdje na vašoj pohrani koja sadrži sljedeći kod i njegovo izvršavanje (krediti za agnostik-apolon na GitHubu, programeru uključenom u Termux):

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

Da biste je izvršili, u Termuxu dođite do mape u koju ste spremili skriptu i upišite sljedeće:

shfilename.sh

Ako vaš telefon počne zaostajati, to znači da radi. Gornji kod pokreće 40 sha256sum operacija u pozadini (označenih znakom &) uzimajući /dev/zero datoteku kao ulaz. sha256sum će dati SHA-256 hash bilo koje datoteke koja je dana kao ulaz. Razlog /dev/zero koristi se da je to datoteka beskonačne duljine koja sadrži nulte vrijednosti sve dok se čita, što znači da operacija sha256sum nikada neće doći do kraja datoteke, što služi kao dobar stres test za osiguranje kontinuirane pozadine operacije.

Nakon nekoliko sekundi do minute može vam se pojaviti sljedeće:

"signal 9" je signal poslan procesu koji ga prisiljava na gašenje, a taj signal šalje Linux planer. Razlog zašto se pojavljuje poruka je taj što je bash terminal tehnički također proces dijete Termuxa, a Android 12 na kraju ubija bash terminal u gornjoj demonstraciji. U logcat izlazu možete vidjeti sljedeće:

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

Važan redak je onaj koji spominje da je "bash" proces trimiran i zatim umro, i da zato Termux prestaje raditi. Iako nisam siguran što je "nightwatch.txt", čini se da letimično Google pretraživanje sugerira da je povezano s Facebookom i Facebook Messengerom, dvije aplikacije koje sam instalirao. Testirao sam ovo s isključenom adaptivnom baterijom i uvjerio se da nema optimizacije baterije primijenjene ni na Termux.

Nakon što završite s testiranjem, vjerojatno će se neke od operacija sha256sum nastaviti u pozadina i dalje (a pritiskom na enter prisilno ćete zatvoriti Termux), pa ponovno otvorite Termux i upišite sljedeće:

killall sha256sum

Iako takvo ograničenje ima smisla za neke aplikacije, aplikacije koje bi napredni korisnici mogli biti skloniji koristiti (kao što je Termux) će imati problema. To također može utjecati na druge aplikacije koje također koriste iskusni korisnici, kao što je Tasker. To je ograničenje koje se još ne čini mogućim prevladati i uvodi još više ograničenja za pozadinske aplikacije povrh svih ostalih vlasničkih ograničenja koja nameću proizvođači. U tekućoj temi problema GitHuba, agnostic-apollo spominje sljedeće u vezi s logcatom koji im je poslan e-poštom:

"Sva 32 praćena logcat PhantomProcessRecord pripadaju com.wsandroid.suiteu, a termuxov bash bio je jedan od procesa koji je ubijen. Kao što je gore spomenuto, ograničenje od 32 procesa odnosi se na sve aplikacije zajedno"

Zabavno, proveo sam iste testove na Xiaomi 11T Pro s Androidom 11 i potvrdio da ponašanje ne postoji na tom određenom uređaju u toj konfiguraciji, iako su Xiaomi uređaji poznati po pozadinskim aplikacijama ograničenja. Ovo je, začudo, jedno od najstrožih pravila upravljanja pozadinskim aplikacijama koje je uvedeno na bilo kojem pametnom telefonu s Androidom, jer ga nema načina zaobići. Čak je i na Xiaomi uređajima i OnePlus uređajima moguće onemogućiti najviše od toga, a za neke je ljude dovoljno da budu sretni onemogućavanje svih optimizacija baterije na tim uređajima. Za razliku od toga, fantomski ubojica procesa ne može se niti onemogućiti.

Ako se oslanjate na Termux za mnoge operacije na uređaju koje su intenzivne s mnogo pozadinskih procesa, možda bi bilo vrijedno odgoditi nadogradnju za sada dok ne bude više informacija. Ako niste iskusan korisnik, to vjerojatno nije nešto o čemu biste se trebali brinuti.