ListView中的RecycleBin机制

来源:原创作者:编辑:admin2020-03-15 03:05

  在自定义Adapter时,我们经常会重写Adapter的getView方法,该方法的签名以下所示:

  此处会传入一个convertView变量,它的值有能够是null,也有能够不是null,假设不为null,我们便可以复用该convertView,对convertView外面的一些控件赋值后可以将convertView作为getView的前去值前去,这么做的目标是增加LayoutInflater.inflate()的调用次数,从而晋升了功用(LayoutInflater.inflate()比拟消耗功用)。

  本文将引见ListView中的RecycleBin机制,让大年夜家对ListView中的优化机制有个概括的了解,同时也说明convertView的前因后果。

  起首,我们知道,Adapter是数据源,AdapterView是展现数据源的UI控件,Adapter是给AdapterView应用的,经过调用AdapterView的setAdapter方法便可让一个AdapterView绑定Adapter对象,从而AdapterView会将Adapter中的数据展现出来。

  AdapterView的子类有AbsListView和AbsSpinner等,个中AbsListView的子类又有ListView、GridView等,所以ListView秉承自AdapterView。

  假设Adapter中有10000条数据,将这个Adapter对象赋给ListView,假设ListView创立10000个子View,那么App必然解体了,因为Android没有才华同时绘制这么多的子View。而且,即使能同时绘制这10000个子View也没甚么意义,因为手机的屏幕大年夜小是有限的,有能够ListView的高度只能最多显示10个子View。基于此,Android在设计ListView这个类的时分,引入了RecycleBin机制—–对子View停止收受接管应用,RecycleBin直译过去就是收受接管站的意思。

  RecycleBin基起源基础理

  下面先简明说一下RecycleBin中的任务道理

  在某一时辰,我们看到ListView中有很多View呈现在UI上,这些View对我们来讲是可见的,这些可见的View可以称作OnScreen的View,即在屏幕中能看到的View,也能够叫做ActiveView,因为它们是在UI上可操作的。

  当触摸ListView并向上滑动时,ListView上部的一些OnScreen的View位置上移,并移除ListView的屏幕范围,此时这些OnScreen的View就变得不偏见了,不偏见的View叫做OffScreen的View,即这些View曾经不在屏幕可见范围内了,也能够叫做ScrapView,Scrap表现放弃的意思,ScrapView的意思是这些OffScreen的View不再处于可以交互的Active形状了。ListView会把那些ScrapView(即OffScreen的View)删除,如许就不用绘制这些原本就不偏见的View了,同时,ListView会把这些删除的ScrapView放入到RecycleBin中存起来,就像把临时无用的资本放到收受接管站一样。

  当ListView的底部需求显示新的View的时分,会从RecycleBin中取出一个ScrapView,将其作为convertView参数传递给Adapter的getView方法,从而到达View复用的目标,如许就不用在Adapter的getView方法中履行LayoutInflater.inflate()方法了。