RecyclerView缓存的问题

原创 2015年07月10日 18:34:42
 1.RecyclerView非常灵活,包括定制RecycledViewPool。
参考接口:
public void setRecycledViewPool(RecycledViewPool pool)
示例:
        final RecyclerView.RecycledViewPool pool = new RecyclerView.RecycledViewPool() {
            @Override
            public void putRecycledView(RecyclerView.ViewHolder scrap) {
                super.putRecycledView(scrap);
                int cnt = childCount.decrementAndGet();
                if (DEBUG) {
                    Log.d(TAG, "CHILD_CNT(put):" + cnt + ", " + scrap);
                }
            }

            @Override
            public RecyclerView.ViewHolder getRecycledView(int viewType) {
                final RecyclerView.ViewHolder recycledView = super.getRecycledView(viewType);
                if (recycledView != null) {
                    final int cnt = childCount.incrementAndGet();
                    if (DEBUG) {
                        Log.d(TAG, "CHILD_CNT(get):" + cnt + ", " + recycledView);
                    }
                }
                return recycledView;
            }
        };
        pool.setMaxRecycledViews(mTestAdapter.getItemViewType(0), 500);
        mRecyclerView.setRecycledViewPool(pool);



指定缓存大小(DEFAULT_MAX_SCRAP = 5)
public void setMaxRecycledViews(int viewType, int max)
示例:
mRecyclerView.getRecycledViewPool().setMaxRecycledViews(mTestAdapter.getItemViewType(0), 500);

PS:默认情况下,应该很少发生OOM的,可能是使用的drawable过大。内存释放这块,目前可以参考Volley在NetworkImageView中重写onDetachedFromWindow做特殊处理setImageBitmap(null);但很快发现反复滑动后出现ImageView显示空白的问题(仔细观察会发现正好是两个)。

2.RecyclerView中有两种缓存,mCachedViews(DEFAULT_CACHE_SIZE = 2)、mRecyclerPool(DEFAULT_MAX_SCRAP = 5),有点像两级缓存,如果把一级缓存关掉即setItemViewCacheSize(0),理论上应该可以保证onBindViewHolder的执行,然后可以采用onDetachedFromWindow中销毁的方式解决OOM问题。

RecyclerView的优化:RecycledViewPool

想必Tabs+ViewPager+ListView 结合使用的场景在你的Android手机中的各大应用里并不少见,比如最为典型的网易新闻。众所周知,用RecyclerView可以非常简单的替代掉Lis...
  • axi295309066
  • axi295309066
  • 2016年10月06日 02:19
  • 6321

Material Design 实现之 RecyclerView高级特性

RecyclerView的对象池RecyclerViewPool前面提到了,RecyclerView的优势是多个RecyclerView可以共用一个对象池,显而易见,这样能减少View的创建,提高性能...
  • zoudifei
  • zoudifei
  • 2015年11月10日 19:21
  • 2348

Android RecyclerView之RecycledViewPool、SortedListAdapter

想必Tabs+ViewPager+ListView 结合使用的场景在你的Android手机中的各大应用里并不少见,比如最为典型的网易新闻。 众所周知,用RecyclerView可以非常简单的替代掉L...
  • jdsjlzx
  • jdsjlzx
  • 2016年04月11日 13:43
  • 3768

RecyclerView 缓存机制详解

一 前言RecyclerView据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。RecyclerView可以用来代替传统...
  • zhangqiluGrubby
  • zhangqiluGrubby
  • 2016年12月05日 11:51
  • 2282

RecyclerView 解析

在项目中使用RecyclerView已经有很长一段时间了,现在结合RecyclerView源码分析总结一下。 RecyclerView:是support-v7包中的新组件,用于在有限的窗口显示大量的...
  • shuanghe
  • shuanghe
  • 2016年02月17日 17:08
  • 1188

RecyclerView的二级缓存 View缓存的两种方式

在RecyclerView中,有两个缓存:Scrap和Recycle。Scrap中文就是废料的意思,Recycle对应是回收的意思。这两个缓存有什么作用呢?首先Scrap缓存是指里面缓存的View是接...
  • qq_35079719
  • qq_35079719
  • 2016年12月11日 13:46
  • 895

RecyclerView解决条目错乱以及图片闪越+三级缓存机制

RecyclerView导致条目错乱的原因:viewHolder的复用,一个复用的ViewHolder他里边的View有些属性已经被修改了,所以新的item在使用服用的viewHolder时,那些被修...
  • haoxl1994
  • haoxl1994
  • 2017年03月01日 12:58
  • 1030

【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

秉承着实事求是的作风,弄清楚RecyclerView是否有足够的吸引力替换掉ListView,我从性能这一角度出发,研究RecyclerView和ListView二者的缓存机制,并得到了一些较有益的"...
  • Tencent_Bugly
  • Tencent_Bugly
  • 2016年10月31日 11:48
  • 4334

RecyclerView与ListView的缓存机制比较

本来想写一下如题目的东西,可看了几篇别人写的分析觉得更好,拿来转载一下。 原文链接1、Bugly-Android ListView 与 RecyclerView 对比浅析--缓存机制 ...
  • zhongguobaozi
  • zhongguobaozi
  • 2017年05月04日 11:01
  • 291

RecyclerView与ListView对比浅析(二):View缓存篇

上一篇链接:RecyclerView与ListView对比浅析(一):初始化篇 (二)View缓存篇 1. AbsListView(源码版本4.4) RecyclerBin是AbsListV...
  • checkin001
  • checkin001
  • 2015年11月29日 17:39
  • 6766
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RecyclerView缓存的问题
举报原因:
原因补充:

(最多只允许输入30个字)