您当前的位置: 首页 >  android

Kevin-Dev

暂无认证

  • 0浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android -- 技术周刊】第 014 期

Kevin-Dev 发布时间:2022-05-05 15:43:16 ,浏览量:0

在这里插入图片描述

1. 优化

ListView 优化需要自定义 ViewHolder 和判断 convertView 是否为 null 。 而 RecyclerView 是存在规定好的 ViewHolder 。

2. 布局不同

对于 ListView,只能在垂直的方向滚动。而对于 RecyclerView,他里面的 LayoutManager 中制定了一套可以扩展的布局排列接口,所以我们可以重写 LayoutManager 来定制自己需要的布局。RecycleView 可以根据 LayoutManger 有线性布局,瀑布流布局和网格布局。

  • LinearLayoutManager,可以支持水平和竖直方向上滚动的列表。
  • StaggeredGridLayoutManager,可以支持交叉网格风格的列表,类似于瀑布流或者Pinterest。
  • GridLayoutManager,支持网格展示,可以水平或者竖直滚动,如展示图片的画廊。
3. 更新数据

recycleView 可以支持在添加,删除或者移动 Item 的时候,RecyclerView.ItemAnimator 添加动画效果,而listview不支持。而且RecyclerView 有四重缓存,而 ListView 只有二重缓存。ListView和RecyclerView最大的区别在于数据源改变时的缓存的处理逻辑,ListView是"一锅端",将所有的mActiveViews都移入了二级缓存mScrapViews,而RecyclerView则是更加灵活地对每个View修改标志位,区分是否重新bindView。

3.1 Listview 的二级缓存

RecycleBin:大意就是通过两级缓存来缓存view。

(RecycleBin在layout的过程中便于view重用,RecycleBin有两级存储:ActiveViews和ScrapViews。

ActiveViews存储的是layout开始的时候屏幕上那些view。layout结束后,所有ActiveViews中的view被移动到ScrapViews中。

ScrapViews中的views是那些可能被adapter重新用到的view,以避免重新创建不必要的view。)

ActiveViews 一级缓存,顾名思义活动等view,这些view是布局过程开始屏幕上的view。layout开始时这个数组被填充,layout结束,ActiveViews中的view移动到 ScrapViews。ActiveViews代表了一个连续范围的views,其第一个view的位置存储在FirstActivePosition变量中。

ScrapViews 二级缓存,顾名思义废弃的view,无序的被adapter的convertView使用的view的集合 ScrapViews是多个list组成的数组,数组的长度为viewTypeCount,每个item是个list,所以每个list缓存不同类型item布局的 view

3.2 Recyclerview 的四级缓存

RecycleView 的四级缓存是由三个类共同作用完成的,Recycler、RecycledViewPool和ViewCacheExtension。

Recycler ​ 用于管理已经废弃或者与RecyclerView分离的ViewHolder,这里面有两个重要的成员

1.屏幕内缓存 一级缓存,屏幕内缓存指在屏幕中显示的ViewHolder,这些ViewHolder会缓存在AttachedScrap、ChangedScrap中

ChangedScrap —>表示数据已经改变的viewHolder列表

AttachedScrap—>表示未与RecyclerView分离的ViewHolder列表 2.屏幕外缓存 二级缓存,当列表滑动出了屏幕时,ViewHolder会被缓存在 CachedViews ,其大小由ViewCacheMax决定,默认DEFAULT_CACHE_SIZE为2,可通过Recyclerview.setItemViewCacheSize()动态设置。

RecycledViewPool ​ 三级缓存, RecycledViewPool类是用来缓存ViewHolder用,如果多个RecyclerView之间用setRecycledViewPool(RecycledViewPool)设置同一个RecycledViewPool,他们就可以共享ViewHolder。

ViewCacheExtension ​ 四级缓存, 开发者可自定义的一层缓存,是虚拟类ViewCacheExtension的一个实例,开发者可实现方法getViewForPositionAndType(Recycler recycler, int position, int type)来实现自己的缓存。

4. 自定义适配器

ListView 的适配器继承 ArrayAdapter ;RecycleView 的适配器继承 RecyclerAdapter ,并将范类指定为子项对象类.ViewHolder (内部类)。

5. 绑定事件不同

ListView 是在主方法中 ListView 对象的 setOnItemClickListener 方法;RecyclerView 则是在子项具体的 View 中去注册事件。

关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.0364s