3d开奖号455前后关系

Android中文API
ADC-Android API Android SDK Android Studio
当前位置: 主页 > Android开发文档 >

可视化 RecyclerView 缓存机制

时间:2018-01-16 10:42来源:未知 作者:小q 点击:
前言 开题前,笔者还是要说几句先,依旧和前文一样,文章内不涉及源码讲解,默认各位读者对源码有一定的了解,撰文的原因也如同前文,因为笔者认为当下在 ListView/RecyclerView 的源

前言

3d开奖号455前后关系 kaitiqian,bizhehaishiyaoshuojijuxian,yijiuheqianwenyiyang,wenzhangneibushejiyuanmajiangjie,morengeweiduzheduiyuanmayouyidingdelejie,zhuanwendeyuanyinyerutongqianwen,yinweibizherenweidangxiazai listview/recyclerview deyuanmajiangjiedewenzhangzhong,dadoushiduizheyuanmapilipala,shizaiyouxiehuisenandong,yushibizhexiangjiangbufenshujukeshihua,shoumoshoudailingduzhequlejieyixiahuancunjizhideshixian,lingtuijianyuedutengxun bugly deyiwen。

3d开奖号455前后关系 1.qianwendizhi:

3d开奖号455前后关系 2.benwenxiangmudizhi: huozhijiexiazai

xiwangyuedubenwenqianqingxianyueduqianwen,benwensuoshejideyixieguanjianzizaishangwenyousuotiji。

一缓

shoumoshoudakai app:

 

这里写图片描述

3d开奖号455前后关系  

3d开奖号455前后关系 recyclerview zhongdeyihuan mattachedscrap yu listview zhongdeyihuan mactiveviews gongnengshijibenxiangside,weilepingmunei item kuaisufuyongercunzai(recyclerview/listview juyouliangci onlayout() guocheng,dierci onlayout() zhongzhijieshiyongdiyici onlayout() huancunde view,erbubizaichuangjian)。

二缓

3d开奖号455前后关系 shijishang,erhuan mcachedviews jiashangsihuan recyclerviewpool hezaiyiqiyu listview deerhuan mscrapedviews yiyixiangtong,weilejijiangjijijiangrupingde item fuyongercunzai。xiamianlaixitanxiaerhuan:

  • ArrayList 类型
  • 默认 size 为 2
  • size 可变
  • 复用算法是从尾部倒序匹配 ViewHolder position 与传入的 position 是否相等,匹配成功则返回
  • 为了优化上一步,下一个可能出现的 item 将会被置于尾部

3d开奖号455前后关系 erhuanshitongguo position laipipeixiangyingde viewholder de,zheilide position zhideshi recyclerview yucede、kenengjinrupingmude item de position,tashiyoudangqianpingmuhuadongfangxianghekejiande item weizhilaigongtongjuedingde。liru:pingmuxiangxiahuadong,neimekenengjinrupingmude item de position jiushidangqiankejiandiyige item de position - 1;pingmuxiangshanghuadong,neimekenengjinrupingmude item de position jiushidangqiankejiandezuihouyige item de position + 1。zheiyangshuoqilaikenengyouxiemohu,jugelizi:

 

这里写图片描述

 

yishangshuzhuangtailaishuo,ruguopingmuxiahua,neimeyucexiayigekenengchuxianzaipingmushangde item de position kenengshi 4(yejiushi item1『e(layoutposition:4)』);erruguopingmushanghua,yucedexiayigechuxianzaipingmushangde item de position shi 0(yejiushi item『a(layoutposition:0)』)。ranhoutongguojiang position yongyuyu mcacheviews zhongde viewholder de layoutposition zuobijiao,ruguoxiangtongzefanhuigai viewholder。

laikandongtu:

3d开奖号455前后关系 1.pingmushanghua:

3d开奖号455前后关系  

这里写图片描述

3d开奖号455前后关系  

可以看到 target mCacheView position 由 0 变成了 4。与此同时,mCachedViews 将可能出现在屏幕上的 item 的位置从原有的位置调整为 ArrayList 的最后一位。

2.pingmuxiahua:

 

这里写图片描述

 

3d开奖号455前后关系 pingmuxiahuadehua,target mcachedview position you 4 bianchengle 0。yucitongshi,mcachedviews neibuyehuizuoxiangyingdediaozheng。

四缓

sihuan(recycledviewpool)xingzhi:

  • neibuweihuleyige sparsearray

  • 3d开奖号455前后关系 sparsearray key wei viewholder de viewtype,zheishuomingmeiyitao viewholder doujuyouzijidehuancunshuju

  • 3d开奖号455前后关系 sparsearray value wei scrapdata leixing,scrapdata jiushiguanjiandehuancunshujule,qishujujiegoujianlveruxia:

      static class ScrapData {
      	ArrayList<ViewHolder> mScrapHeap = new ArrayList<>();
          int mMaxScrap = 5;
          // ...
      }
    

由此可见,针对每一种 ViewHolder,RecycledViewPool 都会维护一个默认大小为 5 的 ArrayList 来用做缓存它们,当然,这里还需要提及的一点是,ArrayList 的默认大小被限制为 5,但是这个值是可以通过 RecycledViewPool#setMaxRecycledViews(viewType, max) 来替换的,比如想换成大一点的 10、20,都是可以的(这也是该数据类型为 ArrayList 而不是数组的原因之一)。

前面说到——“实际上,二缓 mCachedViews 加上四缓 RecyclerViewPool 合在一起与 ListView 的二缓 mScrapedViews 意义相同,为了即将给即将入屏的 item 复用而存在。”,可能有小伙伴疑惑了,既然意义相同,为何不是只有二缓就足够了,还要多一个四缓来更复杂?缘由在于:可以由开发者主动向内填充数据(RecycledViewPool#putRecycledView(ViewHolder),技术上可以实现多个 RecyclerView 共用同一个 RecyclerViewPool(RecyclerView#setRecycledViewPool(RecycledViewPool)3d开奖号455前后关系)。这两点在笔者看来,是在某种业务场景下选择 RecyclerView 还是 ListView 的一个重要缘由所在。至于这两点的实践,第一点笔者已经添加在 Demo 中了(含彩蛋),第二点笔者就不在此处扩展了,各位读者可以自行添加入 Demo 中,相应的数据也都会被展示到屏幕上~

其他

谈谈 BindView(与 ListView 对比)

yige view beiwanzhengdezhanshidaopingmushang,yinggaijingguochuangjian view heji view tianjiashuju(bindview)lianggeguocheng,suoyishijishanghuancunjizhibujinjinzhenduiyu view yaozuohuancun,zuihaohainengduitianjiashujudezheigeguochengzaiyouhuaxia,bijing settext()、setimage() yekenengshiyigehaoshicaozuo。recyclerview jiuzhenduicizuoleyouhua,womenzhidao,listview shijishanghuancundeshi view,er recyclerview shijishanghuancundeshi viewholder,zheijiuyiweizhe listview suirankeyifuyong view,danshiji view tianjiashujuzheigeguochengjiubunengfuyongle,erruguoshifuyong viewholder dehua,bujinfuyongle view,tongshijiangji view tianjiashujudezheigeguochengyebei“huancun”qilaile,er recyclerview jiushizheimegande ——

3d开奖号455前后关系  

这里写图片描述

 

womenkeyikandao,danfanshibeierhuanhuancunqilaide viewholder zaibeizhanshidaopingmushang,shibuhuichufa bindviewholder zheigeguochengde。

3d开奖号455前后关系 ps:dangran,zheidejiyushujuyuanbubian,ruguoshujuyuangaibian,kendingdezhongxinji view tianjiashuju。

谈谈 BindView(局部刷新)

RecyclerView 相比于 ListView 还提供了局部刷新的接口,这让 RecyclerView 在性能上又有了一个亮点:

1.jubushuaxin:

3d开奖号455前后关系  

这里写图片描述

 

3d开奖号455前后关系 2.quanjushuaxin:

 

这里写图片描述

 

keyikandao,jubushuaxinnenggouzhizhenduigaibiande view jinxing bind view,erquanjushuaxinhuizhenduibeiyingxiangdaodesuoyoude view doujinxing bind view。suoyi,zairichangshiyongzhong,shibushiyinggaiduokaolvshiyongjubushuaxindaitiquanjushuaxinni?


作者:jokermonn
链接:http://juejin.im/post/5a5d3d9b5e1e8
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

(责任编辑:小q)
织梦二维码生成器
顶一下
(3)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容