美文网首页
RecycleView的一些总结

RecycleView的一些总结

作者: Allenlll | 来源:发表于2019-04-15 17:33 被阅读0次

1、RecycleView中的Recycler类里面包含了缓存需要的一些类,重要的类包括:

 //最多缓存两个ViewHolder,取position对比,position对应上才会取并返回,不需要调用onBindViewHolder()
 final ArrayList<ViewHolder> mCachedViews = new ArrayList<ViewHolder>();
//根据viewType找到缓存的viewHolder,每种类型缓存5个。ScrapData中的ArrayList<ViewHolder> mScrapHeap,都是使用ArrayList缓存的。找到后重置数据,所以需要重新调用onBindViewHolder绑定数据。
 RecycledViewPool mRecyclerPool;

2、缓存的类型:先去mCachedView中找(根据position,不需要调用onBindViewHolder),找不到从RecycleViewPool中找(找到后,重置数据,需要调用onBindViewHolder),再找不到就onCreateViewHolder来创建。

3、获取缓存的方法:

  public View getViewForPosition(int position) {
            return getViewForPosition(position, false);
      }

  View getViewForPosition(int position, boolean dryRun) {
            return tryGetViewHolderForPositionByDeadline(position, dryRun, FOREVER_NS).itemView;
      }

4、找到Viewholder后,判断要不要重新绑定数据(tryBindViewHolderByDeadline).设置LayoutParams

5、public void recycleView(View view)回收view的方法
mCachedView大于2个时,从移除头部,并加入RecycleViewPool.
如果mCachedView小于2个时,则把viewHolder加入mCachedViews中

6、recycleView是先复用后回收
7、优化步骤
取消默认动画

mRecyclerView.setItemAnimator(null);

Item等高,减少测量次数

mRecyclerView.setHasFixedSize(true);

设置缓存池缓存数量

mPool.setMaxRecycledViews(itemViewType, number);

设置recycleView缓存数量

mRecyclerView.setItemViewCacheSize(10);

避免创建过多对象

8、

相关文章

网友评论

      本文标题:RecycleView的一些总结

      本文链接:https://www.haomeiwen.com/subject/jyfpwqtx.html