美文网首页
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