/ / Android: le garbage collector ne fonctionne pas pour Bitmap - Android, exception, bitmap, garbage

Android: le ramasse-miettes ne fonctionne pas pour Bitmap - Android, exception, bitmap, garbage

J'ai un ViewPager avec quelques fragments. Dans un fragment onCreateView,

Je décode quelques bitmaps attribués à des champs de la classe Fragment. Si j'essaie de glisser entre les fragments, l'application reçoit un message OutOfMemory exception (heap is exhausted).

Ok, c’est une très mauvaise pratique, mais n’est-ce pas? GC censé libérer de la mémoire avant que mon application soit tuée?

Réaffecter le bitmap au même champ devrait entraîner la libération du bitmap précédent, est-ce que je me trompe? Sur S4, je reçois l'exception très bientôt.

Réponses:

1 pour la réponse № 1

Supposons que vous chargiez un bitmap, disons que c’est leTout d’abord, puis assignez une nouvelle seconde bitmap décodée à la première, la première ne sera pas "GC" lorsque vous décoderez la seconde. GC le fera plus tard, quand elle le décidera. Si vous souhaitez libérer de la mémoire dès que possible, appelez recycle (). juste avant de décoder le deuxième bitmap. ici. Et, passez par Android "s Gestion de la mémoire bitmap article. Référer ce aussi.


0 pour la réponse № 2

Les fragments sont conservés en mémoire, sauf indication contraire. Vous devez donc détacher et supprimer manuellement les fragments lors du balayage ou mBitmap.recycle () lors du balayage.

Modifier, code:

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