Tudnál példákat adni olyan helyzetekre vagy tényezőkre, amelyek memória szivárgáshoz vezethetnek Android alkalmazásokban?
sobes.tech MI
Válasz az MI-től
Az Android alkalmazások memória szivárgásainak fő okai:
-
Állandó hivatkozások az Activity vagy View kontextusára. Például statikus változók, amelyek egy Activity-re hivatkoznak, megakadályozva a szemétgyűjtőt, hogy felszabadítsa azt.
-
Hibás eseményfigyelők és callback-ek használata. Ha egy eseményfigyelő nincs leiratkozva, akkor tartósan hivatkozhat az objektumra.
-
Anonim belső osztályok és lambda-k használata, amelyek implicit módon tartanak hivatkozást a külső osztályra.
-
Erőforrások helytelen kezelése, például nem lezárt Cursor, InputStream, Bitmap.
-
Handler használata késleltetésekkel vagy üzenetekkel, amelyek egy Activity-re hivatkoznak, de nem tisztulnak az megsemmisítéskor.
-
Nagy objektumok cache-elése korlátlan mérettel.
Példa a statikus hivatkozás okozta szivárgásra:
class MyActivity : AppCompatActivity() {
companion object {
var leakedReference: MyActivity? = null
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
leakedReference = this // Az Activity nem lesz felszabadítva
}
}
A szivárgások elkerülése érdekében fontos az objektumok életciklusának helyes kezelése és az erőforrások felszabadítása.