说到ListView当然少不了Adapter了,Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面的额时候,都会调用Adapter的getView()这个方法返回一个View。这样,ListView中有多少项,就应该调用多少次getView()方法去绘制每一项的界面。如果项数少的时候(几十行),这是没问题的。但是如果有一万行,一百万行,那么就会出现问题了,它会占用系统极大的内存,所以必须采用性能优化的方法。
先说一下ListView的工作原理:ListView工作的时候,会针对每个item,要求Adapter对象返回一个View(getView()方法),也就是说,Listview在开始绘制的时候,系统首先调用getCount(),根据其返回值得到ListView的长度,然后根据这个长度,调用getView()一行一行的绘制ListView的每一项。
搞清楚了ListView的工作原理,我们就可以来看ListView的缓存机制了,如下:
(1)如果有几千,几万行甚至更多的代码的时候,其中只有课件的项存在于内存中,其他的都在Recycler中,Recycle是Android中专门用来处理缓存的组件。
(2)ListView先通过getView()方法请求一个View,然后请求其他可见的View。这时convertView在getView中是空的。
(3)当列表第一项滚出屏幕,并且一个新的项从屏幕低端上来时,ListView会再请求一个View,这时,convertView已经不是空值了,它的值是滚动出屏幕的第一项,之后只需要设定新的数据,然后返回convertView即可,而不必重新创建一个View。
转载于:https://blog.51cto.com/jinchao/1588951