当前位置: 首页 > news >正文

破解版网站建设专业企业网站制作

破解版网站建设,专业企业网站制作,新产品代理项目推荐,企业网站免费建设工具稍微看了下源码和部分文章#xff0c;在此做个小小的总结 RecyclerView#xff0c;意思为可回收的view#xff0c;那么相对于listview#xff0c;他的缓存复用肯定是一大优化。 具体而言#xff0c;当一个列表项被移出屏幕后#xff0c;RecyclerView并不会销毁其视图在此做个小小的总结 RecyclerView意思为可回收的view那么相对于listview他的缓存复用肯定是一大优化。 具体而言当一个列表项被移出屏幕后RecyclerView并不会销毁其视图而是会缓存起来以提供给新进入屏幕的列表项重用这种重用不但可以避免重复创建不必要的视图还可以避免重复执行昂贵的findViewById从而达到的改善性能、提升应用响应能力、降低功耗的效果。 一、核心类 Recycler这个类是 RecycelerView 缓存复用机制的核心。 在我们常规使用RecyclerView时与RecyclerView构建动态列表相关联的几个重要类中Adapter与ViewHolder负责配合使用共同定义RecyclerView列表项数据的展示方式其中 ViewHolder是一个包含列表项视图(itemView)的封装容器同时也是RecyclerView缓存复用的主要对象。 Adapter则提供了数据和视图间的“绑定”关系其包含以下几个关键方法 onCreateViewHolder负责创建并初始化ViewHolder及其关联的视图但不会填充视图内容。onBindViewHolder负责提取适当的数据填充ViewHolder的视图内容。 而RecyclerView的缓存机制则可以减少onCreateViewHolder和onBindViewHolder的调用从而达到减少开销提高性能的效果。 最优解就是两个方法都不调用直接复用次解是只需要调用onBindViewHolder进行数据的绑定而不需要去重新绑定View最差解肯定是两个都需要去调用了。 public final class Recycler {final ArrayListRecyclerView.ViewHolder mAttachedScrap new ArrayList();ArrayListRecyclerView.ViewHolder mChangedScrap null;final ArrayListRecyclerView.ViewHolder mCachedViews new ArrayListRecyclerView.ViewHolder();RecyclerView.RecycledViewPool mRecyclerPool;private RecyclerView.ViewCacheExtension mViewCacheExtension;}从上述代码可以看出缓存复用的对象是 ViewHolder。上面五个成员变量就是我们常说的 RecyclerView 的四级缓存分别是 mChangedScrap/mAttachedScrap主要用于临时存放仍在当前屏幕可见、但被标记为「移除」或「重用」的列表项其均以ArrayList的形式持有着每个列表项的ViewHolder对象大小无明确限制但一般来讲其最大数就是屏幕内总的可见列表项数。 其中mChangedScrap主要是为列表项数据发生变化时的动画效果服务的。mChangedScrap缓存中的ViewHolder是需要调用onBindViewHolder方法重新绑定数据的。 mAttachedScrap应对的则是剩下的绝大部分场景比如像notifyItemMoved、notifyItemRemoved这种列表项发生移动但列表项数据本身没有发生变化的场景。如果和RecyclerView上的position或者itemId匹配上了那么认为是干净的ViewHolder是可以直接拿出来使用的无需调用onBindViewHolder方法。 mCachedViews用来缓存移出屏幕之外的 ViewHolder但有可能很快重新进入屏幕的列表项。只要position或者itemId对应上了就无需重新绑定数据默认大小为2可以通过  public void setItemViewCacheSize(int size) {     mRecycler.setViewCacheSize(size); }   修改缓存大小mViewCacheExtension这一层的创建和缓存完全由开发者自己控制初始值为 null。这一层很少会用到。mRecyclerPoolViewHolder 缓存池。mRecyclerPool主要用于按不同的itemType分别存放超出mCachedViews限制的、被移出屏幕的列表项其会先以SparseArray区分不同的itemType然后每种itemType对应的值又以ArrayList的形式持有着每个列表项的ViewHolder对象每种itemType的ArrayList大小限制默认为5。可通过setMaxRecycledViews(itemType,size)修改大小. 二、Recycler的源码调用 public final class Recycler {.../*** 尝试通过从Recycler scrap缓存、RecycledViewPool查找或直接创建的形式来获取指定位置的ViewHolder。*/NullableViewHolder tryGetViewHolderForPositionByDeadline(int position,boolean dryRun, long deadlineNs) {if (mState.isPreLayout()) {// 0 尝试从mChangedScrap中获取ViewHolder对象holder getChangedScrapViewForPosition(position);...}if (holder null) {// 1.1 尝试根据position从mAttachedScrap或mCachedViews中获取ViewHolder对象holder getScrapOrHiddenOrCachedHolderForPosition(position, dryRun);...}if (holder null) {...final int type mAdapter.getItemViewType(offsetPosition);if (mAdapter.hasStableIds()) {// 1.2 尝试根据id从mAttachedScrap或mCachedViews中获取ViewHolder对象holder getScrapOrCachedViewForId(mAdapter.getItemId(offsetPosition),type, dryRun);...}if (holder null mViewCacheExtension ! null) {// 2 尝试从mViewCacheExtension中获取ViewHolder对象final View view mViewCacheExtension.getViewForPositionAndType(this, position, type);if (view ! null) {holder getChildViewHolder(view);...}}if (holder null) { // fallback to pool// 3 尝试从mRecycledViewPool中获取ViewHolder对象holder getRecycledViewPool().getRecycledView(type);...}if (holder null) {// 4.1 回调createViewHolder方法创建ViewHolder对象及其关联的视图holder mAdapter.createViewHolder(RecyclerView.this, type);...}}if (mState.isPreLayout() holder.isBound()) {...} else if (!holder.isBound() || holder.needsUpdate() || holder.isInvalid()) {...// 4.1 回调bindViewHolder方法提取数据填充ViewHolder的视图内容bound tryBindViewHolderByDeadline(holder, offsetPosition, position, deadlineNs);}...return holder;}...} 从上述代码中可以看到他们的调用顺序为依次从mChangedScrap/mAttachedScrap、mCachedViews、mViewCacheExtension、mRecyclerPool中尝试获取指定位置或ID的ViewHolder对象以供重用如果全都获取不到则直接重新创建。 参考文章 https://juejin.cn/post/7344941254236749851?searchId202411182234361EC6BF29AC9F2C8D6DB5https://juejin.cn/post/7344941254236749851?searchId202411182234361EC6BF29AC9F2C8D6DB5关于RecyclerView和ListView的缓存对比 https://juejin.cn/post/6844903448974983181?searchId20241118230728641CF838198392957185https://juejin.cn/post/6844903448974983181?searchId20241118230728641CF838198392957185
http://www.w-s-a.com/news/345794/

相关文章:

  • 舆情监控都有哪些内容西安seo网站公司
  • 网站有域名没备案天津网络营销
  • 哈巴狗模式网站开发电子商务平台建设与运营技术
  • 摄影网站源码wordpress内涵段子
  • 实验一 电子商务网站建设与维护图片做网站
  • 网站策划书模板大全中国建设部官方网站资格证查询
  • vps绑定多个网站创意咨询策划公司
  • 做qq图片的网站网页制作与网站建设江西
  • 做爰全过程的视频网站网络文化经营许可证怎么办
  • 常德市网站建设网站开发用哪个软件好
  • 网站文章怎么更新时间重庆勘察设计网
  • 外卖网站设计企业网站优化做法
  • 专业的营销型网站制作wordpress版权年份
  • 程序员会搭建非法网站吗怎么把wordpress字去掉
  • 牡丹江营商环境建设监督局网站中国档案网站建设的特点
  • 网站欣赏网站欣赏知名企业网站搭建
  • 书店网站建设可行性分析为大型企业设计网络营销方案
  • 北京教育云平台网站建设中国服装设计网站
  • 网络公司专业做网站豌豆荚app下载
  • 网站建设属于什么岗位济宁网站建设_云科网络
  • wordpress网站监测fwa 网站 欣赏
  • 用jsp做的可运行的网站推广网络
  • 电商网站设计论文wordpress子文件夹建站
  • 临沂网站优化如何如何做公司的网站建设
  • 建设部网站 光纤到户沈阳网页设计兼职
  • 企业网站建设作用宁波企业网站推广效果好
  • wordpress课件站模板做网站的公司 贵阳
  • 低价格网站建设网站建设中的板块名称
  • 青岛网站建设华夏h5链接是什么意思
  • 贸易公司如何做网站百度做的网站一般在什么后台