2015-05-25 7 views
6

Sto usando leakcanery per trovare perdite di memoria in Android. Ho trovato e risolto tutte le perdite Activity. (sorpreso di sapere che c'erano così tanti BTW!). Ho anche aggiunto l'orologio refWatcher per tutti i miei Fragment s.Cause potenziali di perdite di memoria in Android

Domanda 1: C'è qualcos'altro che dovrei osservare che potrebbe causare perdite di memoria evidenti?

Domanda 2: non sta guardando Fragment perdite ridondante dal momento che un Fragment contiene un riferimento alla sua Activity? Ho ricevuto comunque la notifica, giusto? : -/

Domanda 3: Quando controllo il monitor di memoria in Android Studio mostra la crescita dell'utilizzo della memoria nel tempo. E 'un segno di una perdita di memoria gigante o il sistema operativo Android è gentile e mi sta dando più memoria? Come posso trovarlo di sicuro?

+1

è possibile controllare questi: https://developer.android.com/tools/debugging/debugging-memory.html e lo strumento MAT eclissi per maggiori dettagli ti aiuterà –

risposta

5

C'è qualcos'altro che dovrei guardare che potrebbe causare una perdita di memoria evidente?

  • Dichiarare un campo membro static quasi garantisce una perdita di memoria.
  • Le classi anonime che durano oltre la durata della classe padre, ad esempio Volley Request s, generano anche perdite di memoria, poiché contengono un riferimento implicito al genitore Activity e, se lo Activity è terminato prima del completamento della chiamata, un la perdita di memoria ha luogo.

non sta guardando Fragment perdite ridondante dal momento che un Fragment contiene un riferimento alla sua Activity?

A Fragment non "mantiene" un riferimento a Activity. Il riferimento è fornito da FragmentManager. Ma il framework gestisce questo internamente, quindi non devi preoccuparti di questo.

Quando controllo il monitor della memoria in Android Studio mostra la crescita dell'utilizzo della memoria nel tempo. E 'un segno di una perdita di memoria gigante o il sistema operativo Android è gentile e mi sta dando più memoria? Come posso trovarlo di sicuro?

La crescita della memoria di un'app è naturale e la memoria viene ripulita nei passaggi successivi del garbage collector. Nelle lingue che dispongono di macchine virtuali e di garbage collector automatici, il programmatore non ha alcun controllo sull'assegnazione della memoria. Oltre a creare minuscole perdite di memoria, c'è ben poco che un programmatore possa fare per rovinare il processo di gestione della memoria.

+0

"Dichiarare un campo membro statico quasi garantisce una perdita di memoria ". - Scusa ma non ci sono basi per questo. Uso sempre statico e il codice sorgente di Android ne ha in abbondanza. – AndroidDev