2011-02-16 51 views
1

阅读了一些关于性能的文章后, 无法准确获取此声明。了解Android应用程序中的内存泄漏

“当被拉伸附连到的视图,该视图被设置为在可拉伸的回调”
溶液:“设置所存储的可绘回调当活动被破坏为null”

这是什么意思,例如

在我的应用程序,我初始化的onCreate()这样的ImageButton的,

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

在后一阶段,我从一个URL获得的图像,得到了流,转换至绘制,并设置图像BTN这样,

imgButton.setImageDrawable(drawable); 

按照上面的说法,当我离开我的应用程序,例如在的onDestroy() 我必须设置存储可绘回调为null,无法理解这部分!在这个简单的情况下,我必须设置为空?

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

回答

4

只有当您将drawable保存为某个静态字段或某种类型的缓存时,您才需要这样做。在这种特殊情况下,没有理由将回调设置为空。

+0

感谢罗曼盖伊!我从你的文章中获得了性能提示。 我异步加载我的图像。从接口我得到的绘图资源,像 aLoader.loadDrawable(IMAGEURL,新getImageDrawable(){ \t \t \t公共无效imageLoaded(可绘制绘制,字符串IMAGEURL){ \t \t \t \t \t \t imgBtn.setImageDrawable(绘制) ; \t \t} }); 这里,因为我按价值接受了drawable,它会被认为是缓存! – sat 2011-02-16 07:38:53

2

这里正是为例子,你提到的情况:

  1. 电话朝向已改变,这应该意味着老年活动应该是“倾销”和新的创造
  2. 如果你有存储对位图的引用作为静态字段,它引用了本来应该转储的旧活动(可绘制引用TextView,视图引用了活动)
  3. 新活动已创建,但您的drawable仍然有引用老的一个,老的一个不能被倾倒。

当然,这一切都是正确的,如果你存储绘制静态像在引用的例子:

private static Drawable sBackground;