/ / Android: Garbage Collector non funziona per Bitmap: Android, Eccezione, Bitmap, Garbage

Android: garbage collector non funziona per Bitmap - android, exception, bitmap, garbage

Ho un ViewPager con un paio di frammenti. In un frammento suCreateView,

Ho decodificato un paio di bitmap che sono assegnate ai campi nella classe Fragment. Se provo a scorrere tra i frammenti, a un certo punto l'applicazione ottiene un OutOfMemory eccezione (heap is exhausted).

Ok, questa è una brutta pratica, ma non è così GC dovrebbe liberare memoria prima che la mia applicazione venga uccisa?

La riassegnazione della Bitmap allo stesso campo dovrebbe causare il rilascio della Bitmap precedente, sbaglio? Su S4 ottengo l'eccezione molto presto.

risposte:

1 per risposta № 1

Supponiamo di caricare una bitmap, supponiamo che sia ilprima e poi assegnare una nuova seconda bitmap decodificata alla prima, la prima bitmap non è GC "ed quando decodifichi la seconda. GC lo farà in seguito ogni volta che lo decide. Se vuoi liberare memoria al più presto dovresti chiamare recycle () appena prima di decodificare la seconda bitmap. Qui. E, passa attraverso Android "s Gestione della memoria bitmap articolo. Fare riferimento Questo pure.


0 per risposta № 2

I frammenti vengono mantenuti in memoria, se non diversamente indicato, quindi si stacca e si elimina manualmente i frammenti durante lo scorrimento o mBitmap.recycle () durante lo scorrimento.

Modifica, codice:

     final FragmentTransaction fm = getActivity()
.getSupportFragmentManager().beginTransaction();
fm.replace(R.id.fragPlayerMain, playerFragment, "fragment").addToBackStack(null);
fm.hide(thisFrag);
fm.detach(thisFrag);
fm.commitAllowingStateLoss();