无效后从内存中清除图像资源

时间:2017-06-07 13:58:21

标签: java memory-leaks android-memory hprof eclipse-mat

我有一个Android活动需要在应用程序的生命周期内保存在内存中(不要问为什么)。此活动的背景占用大约12MB的内存。我想在没有查看此活动时释放此内存空间。我尝试添加以下代码

@Override
protected void onPause() {
    setBackground(null);
    super.onPause();
}


@Override
protected void onResume() {
    super.onResume();
    setBackgroundResource(R.drawable.bg);
}

但是这会导致仍然分配内存空间。通过MAT检索下面的树,正如您所看到的,没有直接引用我的应用程序本身。

我怀疑Bitmap是在内存中的某个地方,等待成为gc' d,但无论出于何种原因,它都不会。

enter image description here

仅供参考,我也尝试了以下

private Drawable background;

@Override
protected void onResume() {
    background = activity.getResources().getDrawable(R.drawable.bg);
    setBackground(background);
}

@Override
protected void onPause() {
    setBackground(null);
    background = null;
}

但这导致了这种疯狂

enter image description here

1 个答案:

答案 0 :(得分:0)

结束了呼叫

((BitmapDrawable)background).getBitmap().recycle();

清除内存中的数据,而对象则无效!