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 № 1Suponha 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();