我想知道android中listview的回收概念。在这里,我在每个列表项上使用带有图像和文本的列表视图。以下是我的疑惑,在listview中回收视图时会发生什么?
1.在listview中回收list项目时会发生什么?创建的对象(在getView()中)的内存是否被清除?
2.在回收列表项时,为什么视图引用没有被回收并添加到convertview中?如果它在convertview中,那么已经在listitem中加载的位图会发生什么情况。 ListView是否继续引用位图或清除位图的内存?
我想知道android中listview的回收概念。在这里,我在每个列表项上使用带有图像和文本的列表视图。以下是我的疑惑,在listview中回收视图时会发生什么?
1.在listview中回收list项目时会发生什么?创建的对象(在getView()中)的内存是否被清除?
2.在回收列表项时,为什么视图引用没有被回收并添加到convertview中?如果它在convertview中,那么已经在listitem中加载的位图会发生什么情况。 ListView是否继续引用位图或清除位图的内存?
在listview中回收list item时会发生什么?对象创建的内存(在getView()中)是否被清除?
如果您使用的是ViewHolder
pattern,则对象不会从内存中清除。对象将被用于下一个数据项目。
虽然回收列表项,为什么视图引用不回收 并添加到convertview?如果它在convertview中, 会在listitem中加载的位图会发生什么。列表视图保持 引用位图或清除位图的内存?
要清除View
参考,您需要使用ViewHolder
模式。已加载Bitmap
将在那里更新/清除ImageView
。
1.在listview中回收list item时会发生什么?创建的对象(在getView()中)的内存是否被清除?
你getView()
返回的View
传递作为作为参数传递给另一个呼叫getView()
为convertView
。
无论您在重新配置行位置后还是返回,还是返回新的View
,都取决于您。
如果您自己没有对convertView
的引用并且不返回它,那么它就有资格进行垃圾回收,因为listview本身只会保留对从getView()
返回的视图的引用。
2.在回收列表项时,为什么视图引用没有被回收并添加到convertview中?
我不知道你在这里问什么。
如果在convertview中,listitem中已经加载的位图会发生什么情况。 ListView是否继续引用位图或清除位图的内存?
Listview不关心内部的意见。同样,如果你不持有对任何视图或位图的引用,垃圾收集器最终会照顾它们。
嗨laalto,如果我重用convertview(它拥有位图参考),堆内存将增加对吗? –
如果不泄漏内存(即不必要地保留引用),内存最终将被GC回收。 – laalto
谢谢你的回应。我将开发像Facebook这样的应用程序(包含图像和文本的无限列表行)。这是否是重用convertview参考的好习惯? –
查看持有人与查看回收没有任何关系。它只是用于优化的'findViewById()'结果缓存。 – laalto