面试准备-打卡第十一天-Android篇

236 阅读3分钟

RecyclerView是干什么的?

RecyclerView是一个固定大小的View,但可以显示很多数据的控件,通过滚动列表来实现,可以用来代替传统的ListView,更加强大和灵活

RecyclerView的优点?

  1. 它可以替代ListView和GridView,既可以加载列表也可以加载表格
  2. 它支持瀑布流这种高级的显示方式
  3. 内置了强大的缓存机制
  4. 规范了ViewHolder的使用

ListView和RecyclerView的区别?

  1. ListView中ViewHolder是需要自定义的,在RecyclerView中ViewHolder是谷歌封装好的
  2. ListView中的Item是只能垂直滑动的,RecyclerView可以水平滑动或者垂直滑动,针对多种类型条目的展示效果,如瀑布流 网格 支持多种类型
  3. ListView中删除或添加item时,item是无法产生动画效果的,在RecyclerView中添加、删除或移动item时有两种默认的效果可以选择SimpleItemAnimator(简单条目动画)和DefaultItemAnimator(原始的条目动画)

什么是ViewHolder?

ViewHolder通常出现在适配器里,为的是listview滚动的时候快速设置值,而不必每次都重新创建很多对象,从而提高性能

对Adapter的理解?

Adapter:适配器,因为ListView是一个View,不能添加子项,因此在呈现数据的时候就需要某种工具将数据呈现在ListView上,而Adapter就能充当此角色,常用的Adapter有:ArrayAdapter和BaseAdapter

ListView的缓存机制?

image.png ListView的缓存有两级,在ListView里面有一个内部类RecycleBin,Recyclebin有两个对象Active View和Scrap View来管理缓存,Active View是第一级,Scrp View是第二级

  • Active View:是缓存在屏幕内的itemView,当列表数据发生变化时,屏幕内的数据可以直接拿来复用,无须进行数据绑定
  • Scrp View:缓存屏幕外的ItemView,这里的缓存的数据都是“脏”的,也就是需要重新绑定,也就是说屏幕外的所有数据进入屏幕的时候都要走一遍getView()方法

image.png

RecyclerView的缓存机制?

image.png

RecyclerView的缓存分为四级

  • Scrap
  • Cache
  • ViewCacheExtension
  • RecycledViewPool Scrap对应的是ListView里面的Active View,就是屏幕内的缓存数据

Catch对应的是刚刚移出屏幕的缓存数据,默认大小是2个,当其容量被充满同时又有新的数据添加的时候,会根据FIFO原则,把优先进入的缓存数据移出并放到下一级缓存,然后再把新的数据添加进来,Catch里面的数据是干净的,也就是携带了原来的ViewHolder的所有数据信息,数据可以直接拿来复用

ViewCacheExtension是谷歌留给开发者自己来定义缓存的

RecycledViewPool刚刚说到Catch它默认的缓存数量是两个,当catch缓存满了以后会根据FIFO的规则把Catch先缓存进入的ViewHolder移出并缓存到RecyclerViewPool中,,RecyclerViewPool的默认的缓存数量是5个,RecyclerViewPool与Cache相比不同的是,从Catche里面移出的ViewHolder在存入RecyclerViewPool之前ViewHolder的数据会被全部重置,相当于一个新的ViewHolder,而且catche是根据position来获取ViewHolder,而RecycledViewPool是根据itemType获取的,因为RecyclerViePool缓存的ViewHolder是全新的,所以取出的时候需要走onBindViewHolder()方法

image.png