Az Android 12 új háttéralkalmazás-korlátozása komoly fejtörést okozhat a hatékony felhasználóknak

Az Android 12 új háttéralkalmazás-korlátozása komoly fejtörést okozhat azoknak a felhasználóknak, akik olyan alkalmazásokat használnak, mint a Termux és talán még a Tasker is.

Android 12 sok változást vezetett be, bár nem mindegyik igazán felhasználóbarát. Az olyan funkciók, mint a masszív, újratervezett anyag, nyilvánvalóan az arcodba nyomulnak, és nehéz kihagyni, de valami ilyesmi Digitális autókulcs a támogatást könnyebben elmulaszthatja. Egy olyan változtatás azonban, amely akár teljesen dokumentálatlan, pusztítást fog okozni az olyan alkalmazásokban, mint a Termux, ez pedig egy meglehetősen agresszív háttérfolyamat-gyilkos bevezetése.

A környezet szempontjából a Termux egy Linux terminálemulátor, amelyet Androidon és a Termux csomagkezelésén szerezhet be A rendszer nagyon hasonlít a Debian Advanced Package Tool (APT) eszközére, mivel kereshet, telepíthet és eltávolíthat a parancs alkalmas. A Termux csak néhány alapvető csomagot telepít a dobozból, hogy csökkentse az APK méretét a Play Áruházban, de lehetővé teszi 

telepítsen minden extra csomagot hogy vágysz. Az emberek gyakran használják a Termuxot arra, hogy a régebbi okostelefonokat miniszerverekké alakítsák, vagy más olyan programok futtatására használják, amelyek általában nem az okostelefonokra vonatkoznak. Gyakori használat még a youtube-dl natív beállítása is, mivel Python szkripteket futtathat a Termux használatával okostelefonján.

Android 12-ben azonban azt fedezték fel egy olyan mechanizmus, amely figyeli az alkalmazások által elindított elágazott gyermekfolyamatokat, és megöli őket, ha túl sok CPU-t fogyasztanak, ha az alkalmazás a háttérben van (a Mishaal Rahman) került bevezetésre. Emellett 32-re korlátozza a szülői folyamatok által létrehozható gyermekfolyamatok számát, ami nagymértékben korlátozza az alkalmazások által a háttérben végrehajtható műveletek számát. Ez a 32 gyermekfolyamat-korlát valójában az egész rendszerre vonatkozik, nem csak alkalmazásonként, ami azt jelenti, hogy más, alárendelt folyamatokkal rendelkező alkalmazások is hozzájárulnak ehhez a korláthoz. Teszteltem a Google Pixel 6 Pro készüléken, és megerősíthetem, hogy a PhantomProcessKiller létezik, és potenciálisan pusztítást okozhat a Termuxon.

Az Android 12 Phantom Process Killerje megöli a háttérfolyamatokat

Az Android 12 néhány korlátozást vezetett be a háttérfolyamatokra vonatkozóan; az első az, hogy a háttérben túl sok CPU-t fogyasztó alkalmazások gyermekfolyamatai megsemmisülnek, ha a szülő folyamat is a háttérben van. A második bevezetett korlátozás az egy adott időpontban aktív gyermekfolyamatok számának korlátozása. Tól elkövetni a történelmet, úgy tűnik, hogy a Google megpróbálta megfékezni a szélhámos háttérfolyamatokat.

"Az alkalmazások használhatják a Runtime.exec()-et a gyermekfolyamatok létrehozásához, és a keretrendszernek fogalma sincs az életciklusáról. Most nyomon követheti ezeket a folyamatokat, amikor megtaláljuk őket – jelenleg a CPU-statisztikák mintavételezése során észrevehetőek voltak. Ha túl sok CPU-t fogyaszt, miközben a szülőalkalmazás folyamata is a háttérben van, ölje meg. Alapértelmezés szerint legfeljebb 32 ilyen folyamatot engedélyezünk; a szüleik legrosszabb oom adj pontszámával rendelkező folyamat megsemmisül, ha túl sokan vannak."

Természetesen az Android okostelefonok már hírhedtek a háttérben végzett alkalmazásgyilkosságról. Szinte az összes nagyobb OEM valamilyen módon, formában vagy formában részt vesz ebben, és a cégek hasonlók A OnePlus, a Samsung és a Xiaomi a legrosszabbok közé tartoznak. Míg az AOSP-nek vannak háttéralkalmazás-korlátozásai, a gyártókra jellemző, hogy saját korlátozásaikat az AOSP-re építik. Ezek azonban meglehetősen szigorú korlátozások a hatékony felhasználók számára, és olyan viselkedésre ösztönöznek, amelyet a hatékony felhasználók már régóta hangosan elleneztek. Lehet, hogy hosszú távon megnöveli az akkumulátor élettartamát, de látszólag nincs mód letiltani sem.

Az Android 12 Phantom Process Killer elindítása

Ahogy a commit mondja, 32 ilyen folyamat engedélyezett, és ezt ellenőriztem a Google Pixel 6 Pro készülékemen a következő paranccsal.

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

Ennek a parancsnak a kimenetében van egy "max_phantom_processes" nevű konstans, amelynek értéke 32. Ebben az összefüggésben az Android rendszer a „fantomfolyamatot” a háttérben futó gyermekfolyamatnak tekinti. Ha Android 12-es eszközzel rendelkezik, a Termux segítségével több mint 32 gyermekfolyamatot indíthat el hozzon létre egy bash szkriptet valahol a tárhelyen, amely tartalmazza a következő kódot, és futtassa azt (hitelek a agnosztikus-apolló a GitHubon, a Termux-szal foglalkozó fejlesztőn):

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

A végrehajtáshoz a Termuxban keresse meg azt a mappát, amelybe a szkriptet mentette, és írja be a következőket:

shfilename.sh

Ha a telefon késést érez, az azt jelenti, hogy működik. A fenti kód 40 sha256sum műveletet generál a háttérben (és jellel jelölve), figyelembe véve a /dev/zero fájlt bemenetként. Az sha256sum megadja a bemenetként megadott fájl SHA-256 kivonatát. Az OK /dev/zero azt használják, hogy ez egy végtelen hosszúságú fájl, amely null értékeket tartalmaz mindaddig, amíg be van olvasva, ami azt jelenti, hogy A sha256sum művelet soha nem éri el a fájl végét, jó stressztesztként szolgál a folyamatos háttér biztosítása érdekében tevékenységek.

Néhány másodperc vagy egy perc elteltével a következők jelenhetnek meg:

A "9-es jel" a folyamatnak küldött jel, amely leállításra kényszeríti, és ezt a jelet a Linux ütemező küldi. Az üzenet megjelenésének oka az, hogy a bash terminál technikailag szintén a Termux gyermekfolyamata, és az Android 12 végül megöli a bash terminált a fenti demonstrációban. A logcat kimenetben a következőket láthatja:

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

A fontos sor az, amelyik megemlíti, hogy a "bash" folyamatot levágták, majd meghalt, és ezért a Termux leáll. Bár nem vagyok biztos benne, mi az a "nightwatch.txt", egy felületes Google-keresés azt sugallja, hogy a Facebookhoz és a Facebook Messengerhez kapcsolódik, két olyan alkalmazáshoz, amelyeket telepítettem. Ezt adaptív akkumulátor kikapcsolással teszteltem, és megbizonyosodtam arról, hogy a Termuxra sem alkalmaztak akkumulátor-optimalizálást.

A tesztelés befejezése után valószínűleg az sha256sum műveletek egy része tovább folytatódik a háttérben álló helyzetben (és az enter lenyomásával a Termux bezárul), ezért nyissa meg újra a Termuxot, és írja be a következőt következő:

killall sha256sum

Noha az ilyen korlátozások bizonyos alkalmazások esetében logikusak, azok az alkalmazások, amelyeket a felhasználók hajlamosabbak lehetnek használni (például a Termux), szenvedni fognak. Ez hatással lehet más alkalmazásokra is, amelyeket a felhasználók is használnak, például a Taskert. Ez egy olyan korlát, amelyet egyelőre nem lehet áthidalni, és még több korlátozást vezet be a háttéralkalmazásokra a gyártók által előírt összes többi tulajdoni korlátozáson felül. A folyamatban lévő GitHub-problémaszálban a következőket említette az agnostic-apollo egy nekik e-mailben elküldött logcattel kapcsolatban:

"Mind a 32 nyomon követett logcat PhantomProcessRecord a com.wsandroid.suite-hoz tartozik, és a termux bash-ja volt az egyik folyamat, amely elpusztult. Tehát, ahogy fentebb említettük, a 32 folyamatkorlát az összes alkalmazásra vonatkozik.

Szórakoztató módon ugyanazokat a teszteket lefuttattam egy Android 11-et futtató Xiaomi 11T Pro készüléken, és megerősítettem, hogy ez a viselkedés nem létezik az adott eszközön ebben a konfigurációban, bár a Xiaomi készülékek hírhedtek a háttéralkalmazásokról korlátozások. Furcsa módon ez az egyik legszigorúbb háttéralkalmazás-kezelési szabályzat, amelyet bármely Android okostelefonon bevezettek, mivel ezt nem lehet megkerülni. Még a Xiaomi eszközökön és a OnePlus eszközökön is lehetséges a letiltása a legtöbb néhány ember számára elegendő az akkumulátor-optimalizálás letiltása ezeken az eszközökön, hogy boldogok legyenek. Ezzel szemben a fantomfolyamat-gyilkost nem is lehet letiltani.

Ha a Termuxra támaszkodik az eszközön végzett műveletek során, amelyek sok háttérfolyamattal intenzívek, érdemes lehet egyelőre elhalasztani a frissítést, amíg nem lesz több információ. Ha Ön nem erős felhasználó, akkor valószínűleg ez nem olyan dolog, ami miatt igazán aggódnia kell.