Ho appena dato un'occhiata al video google io "gestione della memoria per Android". Le diapositive sono disponibili qui http://dubroy.com/memory_management_for_android_apps.pdf. L'esempio perdita di memoria è in slitta 36.Esempio di perdita di memoria Android da Google I/O
Non capisco perché questo causa una perdita dopo il cambio di orientamento. Capisco che la fuga è una classe interiore e ha un riferimento alla classe esterna. Inoltre, capisco che la variabile statica "leak" rimanda all'oggetto "Leaky" ... tutta l'attività. Penso che sia speciale a causa della parola chiave statica. Le variabili statiche hanno una certa memoria e probabilmente non sono gc (almeno finché dura l'applicazione)?!?
Bene, cosa succede in caso di modifica dell'originale? Viene creata una nuova istanza di attività e vengono chiamate le attività onCreate
. leak == null
è falso. La perdita indica ancora l'attività "vecchia". Questa è una perdita. La vecchia attività non può essere, giusto?
Perché l'utilizzo della memoria aumenta con ogni modifica dell'originale? Nella mia (errata) comprensione suppongo che solo la prima attività non possa essere gc'ed. Le altre attività che vengono create a causa del cambiamento di oriantazione possono essere fatte in gc perché non sono referenziate da quella variabile statica "leak".
Tuttavia ... ovviamente ... Ho completamente sbagliato!
Era utile? Un'accettazione sarebbe carina :) –
Penso che tu pensi che l'attività distruzione == garbage collection. Ho aggiunto una risposta che tenta di spiegare cosa sta succedendo. Fondamentalmente, è perché la perdita fa == null nell'attività appena creata. Perchè, leggi la mia risposta. – iheanyi