构建一个加载内容视图布局的对话框(setContentView) 我注意到一件奇怪的事: 加载的布局有一个带有此对话框背景的ImageView:
<ImageView android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/preloader_bg_small"
android:id="@+id/background_img"
/>
每次对话显示(在不同的活动中)它耗尽内存(30mb),图像本身是从本地资源加载的290k jpg并且永远不会被释放
我尝试以编程方式加载图片:
((ImageView)dialog.findViewById(R.id.background_img)).setImageResource(R.drawable.preloader_bg_small);
然后在对话框
上解除之前将其卸载 ((ImageView)dialog.findViewById(R.id.background_img)).setImageDrawable(null);
但是,只有在活动结束后才会释放内存,而不是立即释放。
有释放内存的方法吗? 为什么ImageView会这样?
感谢您的帮助!
答案 0 :(得分:1)
虽然它仍然以下面的方式解决了:
通过直接设置drawable而非资源来加载图片:
((ImageView)dialog.findViewById(R.id.background_img)).setImageDrawable(getResources().getDrawable(R.drawable.preloader_bg_small));
并通过将drawable设置为null
从内存中释放它ImageView background_image = ((ImageView) dialog.findViewById(R.id.background_img));
background_image.setImageDrawable(null);
答案 1 :(得分:0)
Android会为您管理Dialog
作为优化。不幸的是,它在使用后不会删除Dialog
。它让他们一直希望你能再次使用它们。通常,这对您的应用程序来说不是一个优势。但这就是它的工作方式。
您需要做的是在Dialog
被解雇后删除(删除)removeDialog()
。如果您不再需要Dialog
,请致电{{1}}。
答案 2 :(得分:0)
试试((ImageView)dialog.findViewById(R.id.background_img)).setImageResource(android.R.color.transparent);
但它似乎不是图像视图问题。您的活动会保持与图片的关联。请提供更多代码。
答案 3 :(得分:0)
回收BitmapDrawable
的{{1}}资源的示例性方法是使用以下功能:
ImageView