Keresés

Új hozzászólás Aktív témák

  • crok

    Topikgazda

    válasz kiraly.andra #147705 üzenetére

    TL;DR: nem, nem tudja mi a fontos az app folyamatai közül mert az ilyen appok folyamatai nincsenek helyesen megkülönböztetve a számára, lehet egyszerűen csak pl. PERCEPTIBLE_APP-á kellene tegye az appját futás közben és|vagy service-ként lejátszani a zenét.. (és lentebb kifejtem mire gondolok ha érdekel, ha nem - és akit nem - az tekintse tárgytalannak és skip-elheti a komplett hsz-t mert semmit nem veszít :D ).

    A problémának semmi köze egy, a memóriakezelő programozója által elkövetett hibához mert nem ott van a gond hanem az app van úgy megírva hogy nem megfelelő a struktúrája és a folyamatait a rendszer kilőheti és ki is fogja lőni. Nem a rendszer idomul az appokhoz. Az meg hogy folyamatban gondolkodunk és nem teljes appban az a rendszer sajátossága, ez egy nagyon custom linux, de az Alma is közel hasonlóan működik. Sőt, jobbat mondok, anno a Chrome egyik nagy "újítása" volt hogy a tabjai külön folyamatként indulnak és nem egyben indul a teljes program - nem tudom ismerős-e PC-n mikor régen (10+ éve) pl. egy Firefox böngésző sok tabjából egyetlen tabjának az elszállása a böngésző összes tabjának és a teljes programnak a bezáródásával járt.. na.. többek közt ezért jó hogy nem az app van bezárva, plusz hozadéka hogy a tabokat el lehet szeparálni teljesen egymástól ami meg biztonsági szempontből jött jól de az már egy teljesen más dolog.

    1. Nyilvánvalóan nem tesz és nem is tehet meg mindent a rendszer magától*, az OOM_ADJ-t (a score-t) az ActivityManager állítja be az apphoz tartozó összes folyamathoz, futás közben, dinamikusan, attól függően hogy a folyamat az életciklusában milyen állapotba kerül. Az "Android" nem tehet meg mindent, vannak szabályok, nyilván nem lőhet ki kritikus rendszerfolyamatokat se az ActivityManager, se az LMK, ezen folyamatoknak a listája is meg van határozva előre (RILD, Zygote, etc.. és meg is kapják a megfeleleő score-t ÉS lehetnek kivételezettek a doze mód alól is, nyilván doze alól is mennie kell pl. a hívásfogadásnak, SMS fogadásnak) csak ami neked kritikus az az Android rendszernek majdnem biztosan nem kritikus. Ami cached app az a számodra valószínűleg teljesen mást jelent mint a rendszer számára. Egy folyamat életciklusában (ha külön nem figyelnek rá) akkor már azzal megkapja a folyamat a "cached app" kategóriához tartozó OOM_ADJ score-t hogy taszkot váltasz és háttérbe kerül az activity/folyamat amiben épp hagytad de ettől nem lesz háttéralkalmazás, max. előző alkalmazás, utána meg cached.

    2. Az ActivityManager nemcsak a rendelkezésre álló memória hanem a cached app-ok száma szerint is van egy algoritmusa hogy mikor kell elkezdenie appokat kilőni, ami azt jelenti hogy simán lehet még akár akármennyi szabad memóriád akkor IS ki fogja lőni azt az appot amit az OOM_ADJ szerint az AM kilövésre ítél majd. Érdemes az előző linken legalább a változókat átolvasni mert szerintem lesznek meglepetések. Ezt a számot egyébként lehet állítani adb-vel, erről olvashatsz bővebben ebben a Logout blogomban ha rákeresel hogy "activity manager", erre írtam egyébként egy Magisk Modult is bár az meg van spékelve rengeteg egyébbel is, ha gondolod borítsd szét a zip-et és nézz bele a script-ekbe.

    2.5. És emellé jön még az OS/vendor saját mókolása, pl. a MIUI-ban az mcd meg a Security app.. ettől lesz lakatolás, ettől lesz lezárás után időzített cache törlés, zRAM "tuning" a gyártótól, az Android saját doze módja "mellé" egy Xiaomi doze mód.. (ez a MIUI akkukímélés, auto. indítás jog & háttérben futás külön kezelése..) etc..

    3. Az első ponthoz következik még hogy lehet ezt a szabályrendszert akár jól is lehet ám használni, meg is vannak erre a megfelelő programozási megoldások hogy egy zenelejátszó lejátszását lehetőleg bőven a mindenféle egyéb (régebben megnyitott, nem szolgáltatást futtató, etc..) appok után akarja a rendszer kilőni, mint pl. permanens értesítés használata (ezt lehet kombinálni a pl. lejátszási gombokkal hogy legyen valami haszna..), előtér / háttérfolyamatok índítása valamint un. szolgáltatáskénti folyamatindításl amihez magának a zenelejátszónak a "lejátszó" felülete csak egy vezérlő, ami akár el is halhat.. újra megnyitva a megfelelő helyről kiolvassa a lejátszás aktuális állását / adatait és mutatja neked megint. Ilyen (pontosabban hasonló) pl. egy billentyűzet app is, az is szolgáltatás csak speciális, nagyon a végét kell járja a memória (és valami nagyon agresszív előtér app kell fusson, nagyon memóriaigénnyel) hogy a billentyűzet app a rendszer által ki legyen lőve. Hasonlóan speciális a home app is.

    4. "Mi az, hogy a memóriakezelő nem tudja, egy app esetében melyik a main activity?! Ez Android szolgálatatás, vagy a memóriakezelő programozójának hibája?" - egyik-másik app forrását megnézve még néha a developer se tudja minek kéne a main activity-nek lennie de igazából nem mindig a main activity az ami életben kell maradjon, nincsenek worker-ek, nincsenek háttérfolyamatok, etc.. felsorolni is hosszú a lehetséges gondokat és még egy vegytiszta AOSP-on is simán kihal egy-egy folyamat.. ott még kapcsoló sincs arra, hogy "lakatold" memóriába egy-egy app folyamatait. A memóriakezelő folyamatokat figyel, nem appokat, ezt nem akarja vagy tudja sok fejlesztő megérteni. Érdemes megnézni pl. ezt a kis Youtube video sorozatot amiben gyorsan de érthetően ledarálják hogy miért indul lassan egy app, hogy kell megfelelően felépíteni egy appot.. [1] [2] [3] [4] [5] [6] na, pont amiért lassan indul általában azért is lövődik ki "véletlenül" egy-egy folyamat, mert nem jól van struktúrálva. *Root-al persze minden megoldható, lehet erőszakkal állítani az egyes appok folyamatainak OOM_ADJ értékét akár terminálból vagy akár pl. a TeMeFi-vel (a szakmaiban levő linkben - lentebb - említem is majd).

    Az egészről sokkal-sokkal bővebben (linkekkel, forrásokkal) írtam már az Android szakmaiban is és itt ebben a topikban is korábban, valamint a fentebb linkelt Logout blogban is, érdemes lehet átolvasni, ha másért nem gondolatébresztés gyanánt (kissé túlnőtte magát az a bejegyzés egyébként.. vastagon nem (csak) a címében említett készülékről szól) és mivel nagyon sokat segítek Telegram csoportokban is így van egy angol nyelvű "gyűjtő" posztom Telegra.ph-on amiben össze vannak szedve a hasonló gyakori kérdések elég részletesen, többek közt ez a témakör is (memory management, Fine tuning an Android system), ROM fejlesztők is előszeretettel olvassák, ezek elég részletesek Android szemszögből, a WIFI témakör is.

    És bocs.. tennem kéne ide egy krumplit :DDD

Új hozzászólás Aktív témák