Android ImageView导致内存泄漏?

时间:2016-04-07 20:20:20

标签: android memory-leaks imageview

我是我工作公司的应用程序的唯一开发人员。我是应用程序开发的新手,我几乎已经完成了应用程序,但是当我进行测试时,我注意到堆大小增加,同时将应用程序导航到起始量的3倍,直到GC运行并将其击退。我运行了MAT,看到它必须是位图的东西。我每次触摸时都会将图标更改为“开启”状态。这意味着我只是将图标更改为不同颜色的图像,以提供“轻拍”的视觉外观,如下图所示。

    ImageView callButton = (ImageView) findViewById(R.id.callButton);
    callButton.setImageResource(R.drawable.call_on);

然后将它们从onResume(例如下面)“关闭”。

    ImageView callButton = (ImageView) findViewById(R.id.callButton);
    callButton.setImageResource(R.drawable.call_off);

我为整个应用中的每个图标执行此操作。我的问题是这是否导致内存泄漏造成如此多的ImageViews。我应该将它们设置为null onDestory吗?

2 个答案:

答案 0 :(得分:0)

使用setImageDrawable(null)喜欢 -

尽快释放您的位图
callButton.setImageDrawable(null);

答案 1 :(得分:0)

不,您不需要在onDestroy中将位图设置为空。特别是如果您使用来自资源的图像,那么无论如何都会将引用保留在Resources中。你可能想要考虑的是使用StateDrawable并改变状态而不是一直切换drawable,只是为了你自己的理智。但是这种用法不应该导致OOM,除非你有很多图像或其他问题。