【发布时间】:2019-01-20 10:34:41
【问题描述】:
我认为这个问题经常被问到,但在我问过之后
bitmap.release;
bitmap = null;
在Fragment的onDestroy中,使用的内存和以前一样多。
片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
initializeViews();
croppedBitmap = BitmapFactory.decodeFile("/.../0001.jpeg");
imageView.setImageBitmap(croppedBitmap);
fabCreate.setOnClickListener(...); //never called
}
@Override
public void onDestroy() {
clearMemory();
super.onDestroy();
}
void clearMemory(){
fabCreate.setOnClickListener(null);
imageView.setImageBitmap(null);
imageView = null;
croppedBitmap.recycle();
croppedBitmap = null;
java.lang.System.gc();
}
【问题讨论】:
-
还有其他的参考吗?有内存泄漏吗? GC 真的运行了吗?这些都可能是问题。
-
@GabeSechan 位图用于 Imageview。但在我回收位图之前,我将 imageBitmap 从 imageView 设置为 null。而且调用 System.gc(); 后也没有变化
-
System.gc 是一个建议,不是强制执行的。但是您的应用程序中可能存在内存泄漏,通常会在某处保持对它的引用。这也取决于您的 Android 版本 - 保留位图内存的位置已经更改了几次。
-
@GabeSechan 我编辑了我的问题。 Fragment 中没有太多内容,所以我不知道哪里有内存泄漏......
标签: java android memory memory-management