/ / Android: o coletor de lixo não funciona para o Bitmap - android, exceção, bitmap, lixo

Android: o coletor de lixo não funciona para o Bitmap - android, exceção, bitmap, lixo

Eu tenho um ViewPager com alguns fragmentos. Em um fragmento onCreateView,

Eu decodifico alguns bitmaps que são atribuídos a campos na classe Fragment. Se eu tentar passar entre os fragmentos, em um certo ponto o aplicativo recebe um OutOfMemory exceção (heap is exhausted).

Ok, esta é uma prática muito ruim, mas, não é o GC deveria libertar memória antes da minha candidatura ser morta?

A reatribuição do Bitmap ao mesmo campo deve fazer com que o Bitmap anterior seja lançado, estou errado? No S4 eu recebo a exceção muito em breve.

Respostas:

1 para resposta № 1

Suponha que você carregue um bitmap, digamos que é oprimeiro e depois atribuir um novo segundo bitmap decodificado ao primeiro, o primeiro bitmap não é GC "ed quando você decodifica o segundo. GC irá fazê-lo mais tarde sempre que decidir. Se você quiser liberar memória o mais rápido possível, chame recycle () pouco antes de decodificar o segundo bitmap. Aqui. E passe pelo Android "s Gerenciando Memória Bitmap artigo. Referir esta também.


0 para resposta № 2

Os fragmentos são mantidos na memória, a menos que seja indicado o contrário, portanto, você desanexa e elimina fragmentos manualmente ao passar ou mBitmap.recycle () ao passar.

Editar, código:

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