在列表视图中回收视图时会发生什么?

时间:2014-11-14 11:20:41

标签: android listview android-listview bitmap

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

1.在listview中回收列表项时会发生什么?是否清除了对象的内存(在getView()中)?

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

2 个答案:

答案 0 :(得分:0)

  

在listview中回收列表项时会发生什么?是吗?   创建的对象的内存(在getView()中)被清除了吗?

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

  

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

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

答案 1 :(得分:0)

  

1.在listview中回收列表项时会发生什么?是否清除了对象的内存(在getView()中)?

您从View返回的getView()作为参数传递给getView()作为convertView的另一个号码。

是否在重新配置行位置后返回,或返回新的View,由您决定。

如果你自己没有引用convertView并且没有返回它,那么它就有资格进行垃圾收集,因为listview本身只会保留对你从{{1}返回的视图的引用}}

  

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

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

  

如果它在convertview中,将在listitem中加载的位图会发生什么。 listview是否继续引用位图或清除位图的内存?

Listview不关心视图的内部。

同样,如果你没有对任何视图或位图的引用,最终垃圾收集器会处理它们。