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与ListView对比浅析(二):View缓存篇

上一篇链接:RecyclerView与ListView对比浅析(一):初始化篇 (二)View缓存篇 1. AbsListView(源码版本4.4) RecyclerBin是AbsListV...

RecyclerView 缓存机制详解

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

RecyclerView的使用与深入分析

最近一直在捣鼓RecyclerView,今天闲来无事就把之前收集到的资料和使用过程中的体会整理一下,写了如下这篇博客。博客的结构跟之前的博客结构类似,首先简单交代背景,随后给出一个简单使用的实例,最终...

Android DiskLruCache 源码解析 硬盘缓存的绝佳方案

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47251585; 本文出自:【张鸿洋的博客】 一、概述依旧是整理东西...

打造android万能上拉下拉刷新框架——XRefreshView (一)

一、写在开头的话 之所以写这个东西是因为项目中有用到,需要给stickylistheaders加个刷新,其实就是个framelayout里面有个listview的自定义view布局,但是一些知名的刷新...

我国80大“经典名言”

01.每天告诉自己一次,『我真的很不错』。 02.生气是拿别人做错的事来惩罚自己。 03.生活中若没有朋友,就像生活中没有阳光一样。 04.明天的希望,让我们忘了今天的痛苦。 05.生...

Android RecyclerView之RecycledViewPool、SortedListAdapter

想必Tabs+ViewPager+ListView 结合使用的场景在你的Android手机中的各大应用里并不少见,比如最为典型的网易新闻。 众所周知,用RecyclerView可以非常简单的替代掉L...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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