2014-11-14 34 views
0

我想知道android中listview的回收概念。在这里,我在每个列表项上使用带有图像和文本的列表视图。以下是我的疑惑,在listview中回收视图时会发生什么?

1.在listview中回收list项目时会发生什么?创建的对象(在getView()中)的内存是否被清除?

2.在回收列表项时,为什么视图引用没有被回收并添加到convertview中?如果它在convertview中,那么已经在listitem中加载的位图会发生什么情况。 ListView是否继续引用位图或清除位图的内存?

回答

0

在listview中回收list item时会发生什么?对象创建的内存(在getView()中)是否被清除?

如果您使用的是ViewHolder pattern,则对象不会从内存中清除。对象将被用于下一个数据项目。

虽然回收列表项,为什么视图引用不回收 并添加到convertview?如果它在convertview中, 会在listitem中加载的位图会发生什么。列表视图保持 引用位图或清除位图的内存?

要清除View参考,您需要使用ViewHolder模式。已加载Bitmap将在那里更新/清除ImageView

+0

查看持有人与查看回收没有任何关系。它只是用于优化的'findViewById()'结果缓存。 – laalto

0

1.在listview中回收list item时会发生什么?创建的对象(在getView()中)的内存是否被清除?

getView()返回的View传递作为作为参数传递给另一个呼叫getView()convertView

无论您在重新配置行位置后还是返回,还是返回新的View,都取决于您。

如果您自己没有对convertView的引用并且不返回它,那么它就有资格进行垃圾回收,因为listview本身只会保留对从getView()返回的视图的引用。

2.在回收列表项时,为什么视图引用没有被回收并添加到convertview中?

我不知道你在这里问什么。

如果在convertview中,listitem中已经加载的位图会发生什么情况。 ListView是否继续引用位图或清除位图的内存?

Listview不关心内部的意见。同样,如果你不持有对任何视图或位图的引用,垃圾收集器最终会照顾它们。

+0

嗨laalto,如果我重用convertview(它拥有位图参考),堆内存将增加对吗? –

+0

如果不泄漏内存(即不必要地保留引用),内存最终将被GC回收。 – laalto

+0

谢谢你的回应。我将开发像Facebook这样的应用程序(包含图像和文本的无限列表行)。这是否是重用convertview参考的好习惯? –

相关问题