2012-05-06 27 views
5

Ecco alcune osservazioni sulla gestione della memoria newbie a cui vorrei che ascoltasse un parere esperto.Bitmap Android nella memoria perdite xml?

Sembra che l'impostazione di android: backgound = "@ drawable/xyz" in un layout xml causi perdita di memoria nella mia app. Le rispettive attività mantengono lo stack di finché non ottengo un errore OOM. Questo è particolarmente vero se ruoto l'orientamento del dispositivo.

Tuttavia, se carico la stessa risorsa con setBackgoundResource(), quindi deseleziona la richiamata e imposta il riferimento dello sfondo su null, non vi è alcuna perdita di sorta.

che è, prima in onCreate()

mMainLayout.setBackgroundResource(R.drawable.background_general_android); 

e poi in OnDestroy()

mMainLayout.getBackground().setCallback(null); 
mMainLayout.setBackgroundDrawable(null); 

È questo il grosso modo corretto, o mi sto perdendo qualcosa di essenziale?

+0

Di solito faccio lo stesso problema di tanto in tanto. Proverò a gestire bitmap in onCrate e onDestroy. ty – guness

risposta

1

Ciò si verifica solo se si mantiene una copia dei drawable in una cache statica, ad esempio. Potresti anche perdere le tue attività e impostare i drawable su null semplicemente nasconde il problema ancora per un po '. Dovresti usare uno strumento come MAT per ispezionare il contenuto del tuo heap e capire cosa sta succedendo.

+1

L'osservazione sopra si basa su un weekend lungo e doloroso con MAT :) Essenzialmente ho creato un layout lineare barebone con nient'altro che una bitmap di risorse di sfondo di 500 k e un'attività che non ha fatto altro che caricare xml con setContentView(). Quando la bitmap è stata impostata all'interno di xml => perdita di memoria e OOM. Quando caricato a livello di codice e cancellato in onDestroy(), nessun problema. Tuttavia, dovrei menzionare che il resto dell'app, al di fuori di questa attività di test minima, è piuttosto grande, il che può influire sui risultati. In particolare, volevo testarlo in "all'interno dell'app reale". La versione per Android è 2.2 (livello 8). – perza

Problemi correlati