Môžete uviesť príklady situácií alebo faktorov, ktoré môžu viesť k únikom pamäte v aplikáciách na Android?
sobes.tech AI
Odpoveď od AI
Hlavné príčiny únikov pamäte v Android aplikáciách:
-
Dlhodobé odkazy na kontext Activity alebo View. Napríklad statické premenné, ktoré držia odkaz na Activity, bránia garbage collectoru ju odstrániť.
-
Nesprávne používanie poslucháčov a callbackov. Ak poslucháč nie je odhlásený, môže držať odkaz na objekt.
-
Použitie anonymných vnútorných tried a lambda, ktoré implicitne držia odkaz na vonkajšiu triedu.
-
Nesprávne riadenie zdrojov, ako sú Cursor, InputStream, Bitmap, ktoré nie sú zatvorené.
-
Použitie Handlera s oneskoreniami alebo správami, ktoré sa odkazujú na Activity, ale nie sú pri zániku vyčistené.
-
Cacheovanie veľkých objektov bez obmedzenia veľkosti.
Príklad úniku spôsobeného statickou referenciou:
class MyActivity : AppCompatActivity() {
companion object {
var leakedReference: MyActivity? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
leakedReference = this // Activity nebude uvoľnená
}
}
Aby ste predišli únikom, je dôležité správne spravovať životný cyklus objektov a uvoľňovať zdroje.