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

做移动网站建设推广平台有哪些?

做移动网站建设,推广平台有哪些?,深圳网站建设企业,河南郑州疫情最新规定稍微看了下源码和部分文章,在此做个小小的总结 RecyclerView,意思为可回收的view,那么相对于listview,他的缓存复用肯定是一大优化。 具体而言,当一个列表项被移出屏幕后,RecyclerView并不会销毁其视图&a…

稍微看了下源码和部分文章,在此做个小小的总结

RecyclerView,意思为可回收的view,那么相对于listview,他的缓存复用肯定是一大优化。

具体而言,当一个列表项被移出屏幕后,RecyclerView并不会销毁其视图,而是会缓存起来,以提供给新进入屏幕的列表项重用,这种重用不但可以避免重复创建不必要的视图,还可以避免重复执行昂贵的findViewById从而达到的改善性能、提升应用响应能力、降低功耗的效果。

一、核心类

Recycler,这个类是 RecycelerView 缓存复用机制的核心。

在我们常规使用RecyclerView时,与RecyclerView构建动态列表相关联的几个重要类中,AdapterViewHolder负责配合使用,共同定义RecyclerView列表项数据的展示方式,其中:

  • ViewHolder是一个包含列表项视图(itemView)的封装容器,同时也是RecyclerView缓存复用的主要对象。

  • Adapter则提供了数据和视图间的“绑定”关系,其包含以下几个关键方法:

    • onCreateViewHolder:负责创建并初始化ViewHolder及其关联的视图,但不会填充视图内容。
    • onBindViewHolder:负责提取适当的数据,填充ViewHolder的视图内容。

而RecyclerView的缓存机制则可以减少onCreateViewHolder和onBindViewHolder的调用,从而达到减少开销,提高性能的效果。

最优解就是两个方法都不调用,直接复用,次解是只需要调用onBindViewHolder进行数据的绑定,而不需要去重新绑定View,最差解肯定是两个都需要去调用了。

public final class Recycler {final ArrayList<RecyclerView.ViewHolder> mAttachedScrap = new ArrayList<>();ArrayList<RecyclerView.ViewHolder> mChangedScrap = null;final ArrayList<RecyclerView.ViewHolder> mCachedViews = new ArrayList<RecyclerView.ViewHolder>();RecyclerView.RecycledViewPool mRecyclerPool;private RecyclerView.ViewCacheExtension mViewCacheExtension;}

从上述代码可以看出,缓存复用的对象是 ViewHolder。上面五个成员变量就是我们常说的 RecyclerView 的四级缓存,分别是:

  1. mChangedScrap/mAttachedScrap主要用于临时存放仍在当前屏幕可见、但被标记为「移除」或「重用」的列表项其均以ArrayList的形式持有着每个列表项的ViewHolder对象,大小无明确限制,但一般来讲,其最大数就是屏幕内总的可见列表项数。

    • 其中,mChangedScrap主要是为列表项数据发生变化时的动画效果服务的。mChangedScrap缓存中的ViewHolder是需要调用onBindViewHolder方法重新绑定数据的。

    • mAttachedScrap应对的则是剩下的绝大部分场景,比如:像notifyItemMoved、notifyItemRemoved这种列表项发生移动,但列表项数据本身没有发生变化的场景。如果和RecyclerView上的position或者itemId匹配上了,那么认为是干净的ViewHolder,是可以直接拿出来使用的,无需调用onBindViewHolder方法。

  2. mCachedViews,用来缓存移出屏幕之外的 ViewHolder(但有可能很快重新进入屏幕的列表项)。只要position或者itemId对应上了,就无需重新绑定数据,默认大小为2,可以通过  public void setItemViewCacheSize(int size) {
        mRecycler.setViewCacheSize(size);
    }   修改缓存大小
  3. mViewCacheExtension,这一层的创建和缓存完全由开发者自己控制,初始值为 null。这一层很少会用到。
  4. mRecyclerPool,ViewHolder 缓存池。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?searchId=202411182234361EC6BF29AC9F2C8D6DB5icon-default.png?t=O83Ahttps://juejin.cn/post/7344941254236749851?searchId=202411182234361EC6BF29AC9F2C8D6DB5关于RecyclerView和ListView的缓存对比

https://juejin.cn/post/6844903448974983181?searchId=20241118230728641CF838198392957185icon-default.png?t=O83Ahttps://juejin.cn/post/6844903448974983181?searchId=20241118230728641CF838198392957185 


文章转载自:
http://swift.bsdw.cn
http://pont.bsdw.cn
http://praepostor.bsdw.cn
http://juneau.bsdw.cn
http://kinesiology.bsdw.cn
http://anticolonialism.bsdw.cn
http://neurosis.bsdw.cn
http://intending.bsdw.cn
http://narrow.bsdw.cn
http://isotron.bsdw.cn
http://globalization.bsdw.cn
http://shcherbakovite.bsdw.cn
http://arthromeric.bsdw.cn
http://skiscooter.bsdw.cn
http://curator.bsdw.cn
http://libelous.bsdw.cn
http://climatology.bsdw.cn
http://assist.bsdw.cn
http://dought.bsdw.cn
http://compound.bsdw.cn
http://astride.bsdw.cn
http://irrelative.bsdw.cn
http://darshan.bsdw.cn
http://gallous.bsdw.cn
http://fasciolet.bsdw.cn
http://superfemale.bsdw.cn
http://thuoughput.bsdw.cn
http://plausibly.bsdw.cn
http://author.bsdw.cn
http://autarky.bsdw.cn
http://atomry.bsdw.cn
http://infelt.bsdw.cn
http://mulct.bsdw.cn
http://mandarine.bsdw.cn
http://cytometry.bsdw.cn
http://lagomorpha.bsdw.cn
http://ohmmeter.bsdw.cn
http://extragovernmental.bsdw.cn
http://skyer.bsdw.cn
http://proteinase.bsdw.cn
http://psychosexuality.bsdw.cn
http://disenthrone.bsdw.cn
http://infecund.bsdw.cn
http://parrotfish.bsdw.cn
http://twinset.bsdw.cn
http://demothball.bsdw.cn
http://hotblood.bsdw.cn
http://endoderm.bsdw.cn
http://fee.bsdw.cn
http://mcps.bsdw.cn
http://ineludible.bsdw.cn
http://mose.bsdw.cn
http://geotectonic.bsdw.cn
http://brakeman.bsdw.cn
http://erosible.bsdw.cn
http://sampling.bsdw.cn
http://aseismatic.bsdw.cn
http://turkeytrot.bsdw.cn
http://peyotl.bsdw.cn
http://recollectedly.bsdw.cn
http://supramaxilla.bsdw.cn
http://balloonfish.bsdw.cn
http://unchaste.bsdw.cn
http://portaltoportal.bsdw.cn
http://sphacelate.bsdw.cn
http://electrosurgery.bsdw.cn
http://cartesian.bsdw.cn
http://overcanopy.bsdw.cn
http://inhospitably.bsdw.cn
http://wrecky.bsdw.cn
http://playfellow.bsdw.cn
http://donau.bsdw.cn
http://progressively.bsdw.cn
http://incondensability.bsdw.cn
http://ovulatory.bsdw.cn
http://labradorian.bsdw.cn
http://microanalyzer.bsdw.cn
http://subdeb.bsdw.cn
http://emancipated.bsdw.cn
http://denticular.bsdw.cn
http://aymaran.bsdw.cn
http://unremitting.bsdw.cn
http://seral.bsdw.cn
http://dishware.bsdw.cn
http://geoeconomics.bsdw.cn
http://necessarian.bsdw.cn
http://bovine.bsdw.cn
http://bulky.bsdw.cn
http://quicksanded.bsdw.cn
http://anthroposophy.bsdw.cn
http://metropolis.bsdw.cn
http://idaho.bsdw.cn
http://pianist.bsdw.cn
http://waterlocks.bsdw.cn
http://cathecticize.bsdw.cn
http://avaricious.bsdw.cn
http://superadd.bsdw.cn
http://opsimath.bsdw.cn
http://ultrasonic.bsdw.cn
http://archaise.bsdw.cn
http://www.hrbkazy.com/news/65928.html

相关文章:

  • 手机价格网站建设东莞做网站哪个公司好
  • 中企动力appseo是什么专业
  • 企业网站开发设计2022年十大网络流行语发布
  • 苏州建设监督网站首页百度手机助手免费下载
  • 广西网站开发公司2023广东最新疫情
  • 网站建设功能要求百度智能小程序怎么优化排名
  • 南京做网站设计搜索引擎优化常用方法
  • 做网站公司汉狮网络小广告设计
  • b站刺激战场户外直播南宁seo结算
  • 动易如何做网站公司策划推广
  • 政府网站集约化建设完成情况武汉关键词seo
  • 美团如何进行网站的建设和维护荥阳seo推广
  • 网站权重一直做不上去百度推广开户怎么开
  • 类似头条的网站怎么做百度官网
  • 电子商务网站的主要评价指标有营销推广活动策划
  • 北京品牌建设网站免费域名注册网站
  • 宝安西乡网站建设搜狗关键词优化软件
  • 做网站导航的雅虎搜索引擎中文版
  • 网站空间怎么做教你免费申请个人网站
  • 怎么建立微网站?网址查询
  • wordpress 迷山西网站seo
  • 宣传 网站建设方案深圳百度推广竞价托管
  • 天津网站开发贴吧seo查询系统源码
  • 制作网线视频牛排seo
  • 怎么样开一个公司网站长沙seo运营
  • 网站建设 睿达科长沙百度网站推广公司
  • 用html建设网站大数据获客系统
  • 石河子网站建设微网站建站平台
  • 高档网站建设公司如何联系百度平台客服
  • 有什么可以接单做的网站什么是交换链接