Noile limitări ale aplicațiilor de fundal ale Android 12 ar putea fi o durere de cap majoră pentru utilizatorii cu putere care folosesc aplicații precum Termux și poate chiar Tasker.
Android 12 a introdus o mulțime de modificări, deși nu toate sunt cu adevărat orientate către utilizator. Caracteristici precum materialul masiv pe care îl reproiectați sunt evident băgate în față și greu de ratat, dar ceva de genul Cheie digitală de mașină sprijinul ar putea fi mai ușor de ratat. Cu toate acestea, o schimbare care ar putea fi chiar complet nedocumentată va face ravagii în aplicații precum Termux, și aceasta este introducerea unui proces de ucigaș destul de agresiv în fundal.
Pentru context, Termux este un emulator de terminal Linux pe care îl puteți obține pe Android și gestionarea pachetelor Termux sistemul se aseamănă mult cu Instrumentul APT (Advanced Package Tool) Debian prin faptul că puteți căuta, instala și dezinstala cu ajutorul comanda apt. Termux instalează doar câteva pachete de bază din cutie, pentru a reduce dimensiunea APK-ului în Magazinul Play, dar vă permite să
instalați orice pachete suplimentare pe care o dorești. Oamenii vor folosi adesea Termux pentru a transforma smartphone-urile mai vechi în mini servere sau îl vor folosi pentru a rula alte programe care de obicei nu sunt destinate smartphone-urilor. O utilizare comună este chiar și configurarea nativă a youtube-dl, deoarece puteți executa scripturi Python folosind Termux pe smartphone-ul dvs.În Android 12, totuși, a fost descoperit că un mecanism pentru a monitoriza procesele copil bifurcate începute de aplicații și le omoara dacă consumă prea mult CPU dacă aplicația este în fundal (prin Mishaal Rahman) a fost introdus. De asemenea, limitează numărul de procese copil pe care procesele părinte le pot genera la 32, ceea ce limitează foarte mult numărul de operațiuni pe care o aplicație le poate finaliza în fundal. Această limită de 32 de procese copii este de fapt în întregul sistem, nu doar pe aplicație, ceea ce înseamnă că și alte aplicații cu procese secundare vor contribui la această limită. Am testat pe Google Pixel 6 Pro și pot confirma că PhantomProcessKiller există și poate face ravagii pe Termux.
Phantom Process Killer de la Android 12 oprește procesele de fundal
Android 12 a introdus câteva restricții asupra proceselor de fundal; prima este că procesele secundare ale aplicațiilor care consumă prea mult procesor în fundal vor fi oprite dacă procesul părinte este și în fundal. A doua restricție introdusă este o limită a numărului de procese copil care pot fi active la un moment dat. De la comite istoria, s-ar părea că Google a încercat să restrângă procesele de fundal necinstite.
„Aplicațiile ar putea folosi Runtime.exec() pentru a genera un proces copil, iar cadrul nu va avea idee despre ciclul său de viață. Acum urmăriți acele procese ori de câte ori le găsim - în prezent, în timpul eșantionării statisticilor CPU, acestea ar putea fi identificate. Dacă consumă prea mult procesor în timp ce procesul de aplicație părinte este și el în fundal, omorâți-l. În mod implicit, permitem până la 32 de astfel de procese; procesul cu cel mai slab scor oom adj al părinților lor va fi ucis dacă sunt prea mulți dintre ei.”
Desigur, smartphone-urile Android sunt deja renumite pentru uciderea aplicațiilor în fundal. Aproape toți producătorii OEM importanți se angajează într-un fel, formă sau formă, iar companiile le place OnePlus, Samsung și Xiaomi sunt considerate printre cele mai rele. În timp ce AOSP are unele restricții de aplicație de fundal, este tipic pentru producători să-și construiască propriile restricții pe deasupra AOSP. Cu toate acestea, acestea sunt limitări destul de stricte pentru utilizatorii cu putere și încurajează comportamente împotriva cărora utilizatorii puternici s-au opus vocal de mult timp. Poate că va crește durata de viață a bateriei pe termen lung, dar se pare că nu există nicio modalitate de a o dezactiva.
Declanșarea Android 12 Phantom Process Killer
După cum spune commit-ul, sunt permise 32 de astfel de procese și am verificat acest lucru pe Google Pixel 6 Pro cu următoarea comandă.
adb shell "/system/bin/dumpsys activity settings"
În rezultatul acestei comenzi, există o constantă numită „max_phantom_processes” cu o valoare de 32. În acest context, un „proces fantomă” este considerat de sistemul Android ca fiind un proces copil care rulează în fundal. Dacă aveți un dispozitiv Android 12, puteți utiliza Termux pentru a genera mai mult de 32 de procese copil prin crearea unui script bash undeva în spațiul de stocare care conține următorul cod și executarea acestuia (credite către agnostic-apollo pe GitHub, un dezvoltator implicat cu Termux):
for i in $(seq 40); do
sha256sum /dev/zero &
done
Pentru a-l executa, în Termux navigați la folderul în care ați salvat scriptul și tastați următoarele:
shfilename.sh
Dacă telefonul tău începe să se simtă întârziat, înseamnă că funcționează. Codul de mai sus generează 40 de operații sha256sum în fundal (notate cu ampersand) luând /dev/zero fișier ca intrare. sha256sum va oferi hash-ul SHA-256 al oricărui fișier dat ca intrare. Motivul /dev/zero este utilizat este că este un fișier de lungime infinită care conține valori nule atâta timp cât este citit, ceea ce înseamnă că Operația sha256sum nu va ajunge niciodată la sfârșitul fișierului, servind drept un bun test de stres pentru a asigura fundal continuu operațiuni.
După câteva secunde până la un minut, este posibil să apară următoarele:
„semnal 9” este un semnal trimis procesului care îl forțează să se închidă, iar acest semnal este trimis de programatorul Linux. Motivul pentru care apare mesajul este că terminalul bash este, din punct de vedere tehnic, și un proces copil al Termux, iar Android 12 ajunge să omoare terminalul bash în demonstrația de mai sus. În rezultatul logcat, puteți vedea următoarele:
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
Linia importantă este cea care menționează că procesul „bash” a fost tăiat și apoi a murit, și de aceea Termux nu mai funcționează. Deși nu sunt sigur ce este „nightwatch.txt”, o căutare superficială pe Google pare să sugereze că are legătură cu Facebook și Facebook Messenger, două aplicații pe care le-am instalat. Am testat acest lucru cu bateria adaptivă oprită și m-am asigurat că nu există nicio optimizare a bateriei aplicate Termux.
După ce ați terminat testarea, este probabil că unele dintre operațiunile sha256sum vor continua în fundal încă (și apăsând enter va forța închiderea Termux), așa că redeschideți Termux și tastați ca urmare a:
killall sha256sum
Deși o astfel de limitare are sens pentru unele aplicații, aplicațiile pe care utilizatorii puternici ar putea fi mai înclinați să le folosească (cum ar fi Termux) vor avea de suferit. Acest lucru poate avea un efect și asupra altor aplicații pe care le folosesc și utilizatorii puternici, cum ar fi Tasker. Este o limitare care nu pare încă posibil de depășit și introduce și mai multe limitări pentru aplicațiile de fundal pe lângă toate celelalte restricții de proprietate pe care producătorii le impun. În firul în curs de desfășurare a problemei GitHub, următoarele sunt menționate de către agnostic-apollo cu privire la un logcat care le-a fost trimis prin e-mail:
„Toate cele 32 de Logcat PhantomProcessRecord urmărite aparțin com.wsandroid.suite, iar bash’s termux a fost unul dintre procesele care au fost distruse. Deci, așa cum am menționat mai sus, limita de 32 de procese este pentru toate aplicațiile combinate"
În mod amuzant, am rulat aceleași teste pe un Xiaomi 11T Pro care rulează Android 11 și am confirmat că comportamentul nu există pe acel dispozitiv în acea configurație, chiar dacă dispozitivele Xiaomi sunt renumite pentru aplicația de fundal limitări. Aceasta este, în mod ciudat, una dintre cele mai stricte politici de gestionare a aplicațiilor de fundal introduse pe orice smartphone Android, deoarece nu există nicio modalitate de a o ocoli. Chiar și pe dispozitivele Xiaomi și OnePlus, este posibil să se dezactiveze cel mai din aceasta, iar pentru unii oameni, dezactivarea tuturor optimizărilor bateriei pe acele dispozitive este suficientă pentru ca ei să fie fericiți. Ucigașul procesului fantomă, în schimb, nici măcar nu poate fi dezactivat.
Dacă vă bazați pe Termux pentru o mulțime de operațiuni pe dispozitiv care sunt intensive cu multe procese de fundal, ar putea merita să amânați actualizarea pentru moment până când există mai multe informații. Dacă nu sunteți un utilizator cu putere, atunci probabil că acest lucru nu este ceva de care trebuie să vă faceți griji.