ImageView使用的内存永远不会发布

时间:2015-01-13 14:11:07

标签: android android-dialog

构建一个加载内容视图布局的对话框(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会这样?

感谢您的帮助!

4 个答案:

答案 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