ListView解析

ListView解析

直接继承自AbsListView,AbsListView继承自AdapterView,AdapterView又继承自ViewGroup。算法

Adpater在ListView和数据源之间起到了一个桥梁的做用数组

RecycleBin机制缓存

AbListView
RecycleBin机制是ListView可以实现成百上千条数据都不会OOM最重要的一个缘由。RecycleBin是AbsListView的一个内部类。

  • RecycleBin当中使用mActiveViews这个数组来存储View,调用这个方法后就会根据传入的参数来将ListView中的指定元素存储到mActiveViews中。
  • mActiveViews当中所存储的View,一旦被获取了以后就会从mActiveViews当中移除,下次获取一样位置的时候将会返回null,因此mActiveViews不能被重复利用。
  • addScrapView()用于将一个废弃的View进行缓存,该方法接收一个View参数,当有某个View肯定要废弃掉的时候(好比滚动出了屏幕)就应该调用这个方法来对View进行缓存,RecycleBin当中使用mScrapV
  • iews和mCurrentScrap这两个List来存储废弃View。
  • getScrapView 用于从废弃缓存中取出一个View,这些废弃缓存中的View是没有顺序可言的,所以getScrapView()方法中的算法也很是简单,就是直接从mCurrentScrap当中获取尾部的一个scrap view进行返回。
    • 咱们都知道Adapter当中能够重写一个getViewTypeCount()来表示ListView中有几种类型的数据项,而setViewTypeCount()方法的做用就是为每种类型的数据项都单独启用一个RecycleBin缓存机制。
      这里写图片描述
      到此为止,这就很好的解释了为何Listview加载上百条数据都不会形成OOM了的缘由了
相关文章
相关标签/搜索