我有一个带有几个片段的ViewPager。在片段onCreateView上,
我解码了分配给Fragment类中字段的几个位图。如果我尝试在片段之间滑动,则应用程序会在某一时刻获得OutOfMemory
例外(heap is exhausted).
好的,这是一个非常糟糕的做法,但是,在我的应用程序被杀之前,GC
不应该释放内存吗?
将位图重新分配到同一个字段应该会导致先前的Bitmap被释放,我错了吗?在S4我很快得到了例外。
答案 0 :(得分:1)
假设您加载了一个位图,假设这是第一个,然后将新的解码后的第二个位图分配给第一个,第二个位图在解码第二个位图时不是GC。 GC会在稍后决定时执行。如果你想尽快释放内存,你应该在解码第二个位图之前调用recycle()。 Src:here。并且,浏览Android的Managing Bitmap Memory文章。请参阅this。
答案 1 :(得分:0)
除非另有说明,否则碎片会保留在内存中,因此您在滑动时手动分离并处理碎片,或者在滑动时手动分离mBitmap.recycle()。
编辑,代码:
final FragmentTransaction fm = getActivity()
.getSupportFragmentManager().beginTransaction();
fm.replace(R.id.fragPlayerMain, playerFragment, "fragment").addToBackStack(null);
fm.hide(thisFrag);
fm.detach(thisFrag);
fm.commitAllowingStateLoss();