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

Posted

技术标签:

【中文标题】无效后从内存中清除图像资源【英文标题】:Clear image resource from memory after nullifying 【发布时间】:2017-06-07 13:58:20 【问题描述】:

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

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



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

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

我怀疑位图在内存中的某个地方,等待 gc'd,但无论出于何种原因,它永远不会。

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

private Drawable background;

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


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

但这导致了这种疯狂

【问题讨论】:

【参考方案1】:

原来是打电话

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

从内存中清除数据,而清空对象则不会!

【讨论】:

以上是关于无效后从内存中清除图像资源的主要内容,如果未能解决你的问题,请参考以下文章

如何在Ionic中为缓存清除添加哈希到图像和其他静态资源?

AndroidStudio 清除项目里无用的资源

内存优化加载一张图像资源到底占据多少内存

Google earth 占用很多电脑资源吗?

清除数据后从共享偏好中获取价值

上传 tvOS 应用程序时出错