Android:垃圾收集器不适用于Bitmap

时间:2014-02-05 09:50:03

标签: android exception bitmap garbage

我有一个带有几个片段的ViewPager。在片段onCreateView上,

我解码了分配给Fragment类中字段的几个位图。如果我尝试在片段之间滑动,则应用程序会在某一时刻获得OutOfMemory例外(heap is exhausted).

好的,这是一个非常糟糕的做法,但是,在我的应用程序被杀之前,GC不应该释放内存吗?

将位图重新分配到同一个字段应该会导致先前的Bitmap被释放,我错了吗?在S4我很快得到了例外。

2 个答案:

答案 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();