Sobes.tech
Junior — Middle

Können Sie Beispiele für Situationen oder Faktoren nennen, die zu Speicherlecks in Android-Anwendungen führen können?

sobes.tech KI

Antwort von AI

Hauptursachen für Speicherlecks in Android-Anwendungen:

  • Lang anhaltende Referenzen auf den Kontext von Activity oder View. Zum Beispiel statische Variablen, die eine Referenz auf eine Activity halten und so die Garbage Collection verhindern.

  • Falsche Verwendung von Listenern und Callbacks. Wenn ein Listener nicht abgemeldet wird, kann er eine Referenz auf das Objekt behalten.

  • Verwendung von anonymen inneren Klassen und Lambdas, die implizit eine Referenz auf die äußere Klasse halten.

  • Unzureichendes Ressourcenmanagement, z.B. nicht geschlossene Cursor, InputStream, Bitmap.

  • Verwendung von Handlern mit Verzögerungen oder Nachrichten, die sich auf eine Activity beziehen, aber beim Zerstören nicht bereinigt werden.

  • Caching großer Objekte ohne Begrenzung der Größe.

Beispiel für ein Leck durch statische Referenz:

class MyActivity : AppCompatActivity() {
    companion object {
        var leakedReference: MyActivity? = null
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        leakedReference = this // Activity wird nicht freigegeben
    }
}

Um Lecks zu vermeiden, ist es wichtig, den Lebenszyklus der Objekte richtig zu verwalten und Ressourcen freizugeben.