无效后从内存中清除图像资源
Clear image resource from memory after nullifying
我有一个 Android Activity 需要在应用程序的生命周期内保存在内存中(不要问为什么)。这个Activity的后台占用了大约12MB的内存。当 Activity 未被查看时,我想释放此内存 space。我尝试添加以下代码
@Override
protected void onPause() {
setBackground(null);
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
setBackgroundResource(R.drawable.bg);
}
但这导致内存 space 仍在分配中。下面的树是通过 MAT 检索的,如您所见,没有直接引用我的应用程序本身。
我怀疑位图在内存中的某处,等待被 gc,但无论出于何种原因,它永远不会。
仅供参考,我还尝试了以下方法
private Drawable background;
@Override
protected void onResume() {
background = activity.getResources().getDrawable(R.drawable.bg);
setBackground(background);
}
@Override
protected void onPause() {
setBackground(null);
background = null;
}
但这导致了这种疯狂
原来是来电
((BitmapDrawable)background).getBitmap().recycle();
从内存中清除数据,而清空对象则不会!
我有一个 Android Activity 需要在应用程序的生命周期内保存在内存中(不要问为什么)。这个Activity的后台占用了大约12MB的内存。当 Activity 未被查看时,我想释放此内存 space。我尝试添加以下代码
@Override
protected void onPause() {
setBackground(null);
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
setBackgroundResource(R.drawable.bg);
}
但这导致内存 space 仍在分配中。下面的树是通过 MAT 检索的,如您所见,没有直接引用我的应用程序本身。
我怀疑位图在内存中的某处,等待被 gc,但无论出于何种原因,它永远不会。
仅供参考,我还尝试了以下方法
private Drawable background;
@Override
protected void onResume() {
background = activity.getResources().getDrawable(R.drawable.bg);
setBackground(background);
}
@Override
protected void onPause() {
setBackground(null);
background = null;
}
但这导致了这种疯狂
原来是来电
((BitmapDrawable)background).getBitmap().recycle();
从内存中清除数据,而清空对象则不会!