Sobes.tech
Junior — Middle

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.