Sobes.tech
Junior — Middle

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.