了解Android应用中的内存泄漏

时间:2011-02-16 07:07:39

标签: android performance

经过一些关于表演的文章后, 无法准确地得到这个陈述。

“当Drawable附加到视图时,视图被设置为可绘制的回调” Soln:“当活动被销毁时,将存储的drawables'回调设置为null。”

这是什么意思,例如

在我的应用中,我在onCreate()中初始化了一个imageButton,就像这样,

imgButton= (ImageButton) findViewById(R.id.imagebtn);

在稍后阶段,我从网址获取图片,获取流并将其转换为可绘制,并设置图像btn,如下所示,

imgButton.setImageDrawable(drawable);

根据上面的说法,当我退出我的应用程序时,请在onDestroy()中说 我必须将存储的drawables的回调设置为null,而不能理解这部分!在这个简单的例子中,我必须设置为null?

我正在使用Android 2.2 Froyo,无论这种技术是必需的还是不必要的。

2 个答案:

答案 0 :(得分:4)

只有将drawable作为静态字段保存在某处或某种缓存中时,才必须执行此操作。在这种特殊情况下,没有理由将回调设置为null。

答案 1 :(得分:2)

以下是您引用的示例中的情况:

  1. 电话方向已更改,这应该意味着应该“转储”旧活动并创建新活动
  2. 如果您已将位图的引用存储为静态字段,则它引用了应该转储的旧活动(drawable引用了TextView,视图引用了活动)
  3. 创建了新活动,但您的drawable仍然引用旧活动,因此旧活动无法转储。
  4. 当然,如果您将drawable存储为静态,如所引用的示例中所有这些都是正确的:

    private static Drawable sBackground;