Android中的Listview知识点总结

Listview定义

Listview就是一个将数据集合以动态滚动方式展示到用户界面上的View

Listiew适配器模式

Adapter是数据源和Listview之间的桥梁,Adapter负责为每个数据制作View,然后交给Listview显示

Listview的RecycleBin机制

当adapter中有成百上千条数据的时候,ListView怎么展示这些数据呢,如果是一次性全部绘制,手机的性能肯定是不支持的,就算支持,意义也不大,因为屏幕就这么大,一次只能展示几条数据;基于这种情况,Android为Listview设计了RecycleBin机制,即对子View进行回收利用

RecycleBin:从字面意思来看就是回收站的意思

  • 某一时刻,Listview里有几个item出现在屏幕上,这些item对应的View可以称作OnScreen的View,即在屏幕中能看到的View,也是ActiveView,可以称为活动的View,因为是可以操作的;
  • 当Listview向上滑动的时候,一些可见View上移,直到移出屏幕范围变成不可见View,叫做OffScreen的View,也是ScrapView,即废弃的view;这些废弃的View,Listview会把它们保存在RecycleBin中,就像把暂时无用的资源放到回收站中一样
  • 当Listview往上滑动,底部新出来的Item需要显示,但是Listview并不会再次通过LayoutInflater实例化出一个View出来给新的item用,因为那样就太消耗性能和内存了;而是会从RecycleBin中取出前面保存的Scrapview,将其作为参数传递给Adapter的getView,从而达到复用的目的。

简而言之:假设屏幕最多能看到11个item,那么当第1个item滚出屏幕,这个item的View进入RecycleBin中,第12个要出现前,通过getView从回收站(RecycleBin)中重用这个View,然后设置数据,而不必通过LayoutInflater重新创建一个View

RecycleBin中有两个很重要的集合
View[] mActiveViews 存储的是OnScreen的View
ArrayList[] mScrapViews 存储的是OffScreen的View

Listview优化

  • 复用Convertview,这样就不必每次都通过LayoutInfalter.from(getContext()).inflate(resourceID,null)加载View,这个主要是优化加载布局的过程
  • ViewHolder保存了每个控件的实例,可以避免频繁findviewbyid去实例化控件,这个主要是优化加载控件的过程
  • 三级缓存,减少网络耗时操作
  • listview停止时再加载图片

猜你喜欢

转载自blog.csdn.net/qq_30993595/article/details/81516222