Sobes.tech
Junior — Middle

Puoi fare esempi di situazioni o fattori che possono portare a perdite di memoria nelle applicazioni Android?

sobes.tech AI

Risposta dell'AI

Le principali cause di perdite di memoria nelle applicazioni Android:

  • Riferimenti duraturi al contesto di Activity o View. Ad esempio, variabili statiche che mantengono un riferimento a un'Activity, impedendo al garbage collector di eliminarla.

  • Uso scorretto di ascoltatori e callback. Se un ascoltatore non viene deregistrato, può mantenere un riferimento all'oggetto.

  • Utilizzo di classi interne anonime e lambda che mantengono implicitamente un riferimento alla classe esterna.

  • Gestione inadeguata delle risorse, come Cursor, InputStream, Bitmap non chiusi.

  • Utilizzo di Handler con ritardi o messaggi che fanno riferimento a un'Activity, ma non vengono puliti alla distruzione.

  • Caching di grandi oggetti senza limiti di dimensione.

Esempio di perdita a causa di un riferimento statico:

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

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        leakedReference = this // L'Activity non verrà liberata
    }
}

Per evitare perdite, è importante gestire correttamente il ciclo di vita degli oggetti e liberare le risorse.