首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

再也不用担心面试官问RecycleView了

讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView。缓存的是什么?cachedView会执行onBindView吗?...讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView。缓存的是什么?cachedView会执行onBindView吗?...bindView mCacheViews(屏幕外),保存最近移出屏幕的ViewHolder,包含数据和position信息,复用时必须是相同位置的ViewHolder才能复用,应用场景在那些需要来回滑动的列表中,往回滑动...//按下操作的时候,就通知父view不要拦截,拿起操作就设置可以拦截,正常走父view的滑动。...也就是说它嵌套在NestedScrollView中,默认会随着NestedScrollView滚动而滚动,放弃了自己的滚动。所以给我们的感觉就是滞留、卡顿。

1.4K20

Android 列表视频

视频组件选择 使用的是b站开源的ijk播放器 组件布局 正常的列表视频在视频加载完成之前肯定是要显示图片,视频加载好后在播放视频,ijk中没有发现视频有缩略图的选项,所以布局使用一个帧布局,用张图片把...VideoView盖住,视频加载好后再把图片去掉(为什么不是VideoView盖住图片,如果这样的话再把VideoView展示出来的时候会有一个黑屏,比较影响体验) <FrameLayout...= index) { // 如果不release后面的start无法正常执行,只能release videoView.release();...来判断这个item是否有视频 // playState == VideoView.STATE_PLAYING 由于ijk没有视频准备好的回调,所以只能在这判断他的状态,开始播放就代表准备好了...in videoList) { // 首页release之后不会重新走onBindView,所以要在这手动把这些video view加在list里,要不然pause的时候没法管理

91730
您找到你想要的搜索结果了吗?
是的
没有找到

DiffUtils让你的RecyclerView如斯顺滑

原理 那么为何会重新走onBindView方法呢,你可能会说去看源码就知道了呀。没错,当你不知道它是如何实现的时候,去看源码往往是最直接有效的。...RecyclerView只是一个ViewGroup,其真正实现滑动的是在LayoutManager中。 回收:一个itemView不可见,会将其放到内存中,以便实现复用。...这也就是回答了我们上面的提问,所以我们的思路就来了,可以通过判断数据的变化来控制onBindView中相应逻辑的执行,来提升性能。...DiffUtil主要是和RecyclerView或者ListView配合使用,由DiffUtil找出每个item的变化,由RecyclerView。Adapter更新UI。...数据从网络请求回来之后,走refreshDataSource方法。

73020

Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们

讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView 如何实现RecyclerView的局部更新,用过payload吗,notifyItemChange方法中的参数...网易云音乐二面 你们的项目中做过什么比较难的工作?...泛型的pecs原则 同步屏障 性能优化做过什么工作RecyclerView的缓存结构是怎样的?缓存的是什么?cachedView会执行onBindView吗?...RecyclerView嵌套RecyclerView,NestScrollView嵌套ScrollView滑动冲突 ViewGroup在Action_MoveonIntercept返回true,事件怎么传递...字节跳动 你们的项目中有什么难点? 你们项目的稳定性如何?有做过什么稳定性优化的工作? WebView性能优化做过什么工作? AIDL in out oneWay代表什么意思? 线程池了解多少?

1.4K10

使用优化 | RecyclerView中可优化的点

:一个特殊的 ViewGroup,他本身不会做太多的工作。...重要的工作都会交给下面的三个组件来完成 LayoutManager:负责布局和摆放 item ItemAnimator:负责动画 Adapter:适配器模式,对数据进行适配,把数据列表转化成 RecyclerView...RecyclerViewPoll 中查找 在 RecyclerViewPoll 中保存的数据都是脏数据,即使在 RecyclerViewPoll 中找到了,虽然不会重新创建 ViewHolder,但是会重新执行onBindView...这样在渲染的时候主线程就会有更多的空闲时间,那么在这个空闲的状态,recyclerView 就可以用来做 prefetch setInitialPrefetchltemCount(横向列表初次显示可见的...public abstract boolean areItemsTheSame(int oldItemPosition, int newItemPosition); /** * 需要检查两个项是否具有相同的数据

1.4K30

使用优化 | RecyclerView中可优化的点

:一个特殊的 ViewGroup,他本身不会做太多的工作。...重要的工作都会交给下面的三个组件来完成 LayoutManager:负责布局和摆放 item ItemAnimator:负责动画 Adapter:适配器模式,对数据进行适配,把数据列表转化成 RecyclerView...RecyclerViewPoll 中查找 在 RecyclerViewPoll 中保存的数据都是脏数据,即使在 RecyclerViewPoll 中找到了,虽然不会重新创建 ViewHolder,但是会重新执行onBindView...这样在渲染的时候主线程就会有更多的空闲时间,那么在这个空闲的状态,recyclerView 就可以用来做 prefetch setInitialPrefetchltemCount(横向列表初次显示可见的...public abstract boolean areItemsTheSame(int oldItemPosition, int newItemPosition); /** * 需要检查两个项是否具有相同的数据

1.4K20

Android面试题到处攒,一到面试就不知深浅忘个干净?快来看看这份超详细整理!

15、说说DNS,以及存在的问题 DNS用来做域名解析工作的,输入一个域名后,需要把域名转化为IP地址,这个转换过程就是DNS解析。...注解可以用来做什么 主要有以下几个用处: 降低项目的耦合度。 自动完成一些规律性的代码。 自动生成java代码,减轻开发者的工作量。...26、RecyclerView预取机制与缓存机制 讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView。缓存的是什么?...holder.recyclerView.setOnTouchListener { v, event -> when(event.action){ //按下操作的时候,就通知父view...也就是说它嵌套在NestedScrollView中,默认会随着NestedScrollView滚动而滚动,放弃了自己的滚动。所以给我们的感觉就是滞留、卡顿。

1.4K20

大潮退去没有谁还能Android这行“裸泳”,10家大厂面试题,掌握这些让你轻松面试

13.讲一下RecyclerView的缓存机制,滑动10个,再滑回去,会有几个执行onBindView 14.如何实现RecyclerView的局部更新,用过payload吗,notifyItemChange...网易云音乐二面 1.你们的项目中做过什么比较难的工作?...泛型的pecs原则 7.同步屏障 8.性能优化做过什么工作? 9.RecyclerView的缓存结构是怎样的?缓存的是什么?cachedView会执行onBindView吗?...10.RecyclerView嵌套RecyclerView,NestScrollView嵌套ScrollView滑动冲突 11.ViewGroup在Action_MoveonIntercept返回true...8.你有没有做什么推进项目工作 9.说说热修复的原理? 字节跳动 1.你们的项目中有什么难点? 2.你们项目的稳定性如何?有做过什么稳定性优化的工作? 3.WebView性能优化做过什么工作

97720

恢复 RecyclerView 的滚动位置

通常这种情况发生的原因是由于异步加载 Adapter 数据,且数据在 RecyclerView 需要进行布局的时候尚未加载完成,导致 RecyclerView 无法恢复到之前的滚动位置。...接下来我们会介绍如何使用这个新的 API,以及它的工作原理。 恢复至原有滚动位置 有好几种方法可以用来恢复 RecyclerView 至正确的滚动位置,您可能已经在实际项目中用到了这些方法。...如果根据您的项目实际情况无法采用这种方法,那也可以使用其他的方法,只是要么比较复杂 (比如避免在 RecyclerView 中设置 Adapter,但这样又有可能导致像 header 等 item 的显示问题...它有三个选项: ALLOW — 默认状态,会在下一次布局完成立即恢复 RecyclerView 状态; PREVENT_WHEN_EMPTY — 仅 adapter 不为空 (即 adapter.getItemCount...() > 0) 的时候,才恢复 RecyclerView 的状态。

1.4K10

JankStats 推出 alpha 版本

RecyclerView 开始移动 (被 "拖动") 以及 RecyclerView 开始自由滚动 (被 "放置") ,我们可在开始之前看到与界面状态相关的信息 (仅列出 Activity 状态)...您尝试检测代码,并将其与 FrameMetrics 或其他性能测量工具集成,该问题就需要开发者自行解决。但是,除非必须要在内部构建这种基础架构,那每个人都有许多别的工作要做。...因此,卡顿问题通常得不到量化测试,而性能问题自然也无法解决。 同样,Android Vitals 信息中心也可以告诉您,应用存在性能问题,但无法告诉您问题发生应用的具体运行情况。...") } } } } 此状态可在您应用中的任何地方 (甚至从其他库) 注入,其报告结果,会被 JankStats 接收到。...这样一来,您从 JankStats 获取报告,不仅可以知道每帧里各种事件花费的时间,还可以了解用户在那一帧期间做了什么,这可能会是相当有用的信息。

1.1K60

RecyclerView预加载!

监听列表滚动状态 第一个想到的方案是监听列表滚动状态,列表快滚动到底部执行预加载,RecyclerView.OnScrollListener提供了两个回调: public class RecyclerView...然后就可以像这样实现预加载: recyclerView.addOnPreloadListener(3) {// 距离列表底部还有 3 个表项执行预加载 // 预加载业务逻辑 } 一运行 Demo...就测出 bug:快速滚动列表onPreload()没有执行,慢慢滚动列表onPrelaod()会执行多次。...在正常滑动过程中,这个方案无法做到精准匹配预加载阈值,即无法实现只回调一次onPreload(),因为onScroll()是像素粒度的回调,而预加载要做的表项粒度的检测。...RecyclerView更换LayoutManager,也不需要修改代码。

2.4K00

Jetpack新成员,Paging3从吐槽到真香

这里我准备采用GitHub的公开API来作为我们这个项目的数据源,请注意GitHub在国内虽然一般都是可以访问的,但有时接口并不稳定,如果你无法正常请求到数据的话,请自行科学上网。...我无法在这里展开解释Flow是什么,你可以简单将它理解成协程中对标RxJava的一项技术。...写到这里,我们的这个项目已经完成了一大半了,接下来开始进行界面展示相关的工作。 由于Paging 3是必须和RecyclerView结合使用的,下面我们定义一个RecyclerView的子项布局。...第一点,我们使用Kotlin的高阶函数来给重试按钮注册点击事件,这样点击重试按钮,构造函数中传入的函数类型参数就会被回调,我们待会将在那里加入重试逻辑。...可以看到,首先我在设备上开启了飞行模式,这样滑动到列表底部就会显示重试按钮。 然后把飞行模式关闭,并点击重试按钮,这样加载进度条就会显示出来,并且成功加载出新的数据了。

2.4K20

淘宝首页Bug!嵌套滑动及NestedScroll

Android NestedScrolling机制完全解析 带你玩转嵌套滑动 一、项目实例--电商首页 1、嵌套滑动的问题点 看懂了以上文章后,现在来分享一下项目中的问题。...所以 按照正常处理滑动冲突的思路处理----tab没到顶部,parent拦截事件,tab到顶部 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...、开始滑动内部RecyclerView,都询问NestedScrollLayout2是否处理且如何处理。...所以,根据我们的问题,在向上滑动内部RecyclerView,如果tab没到顶就让parent消费事件,且滑动外部RecyclerView;到顶了,就滑内部RecyclerView。...相对的, 向下滑动内部RecyclerView,如果还能滑就滑内部RecyclerView;如果已经滑到顶部就让parent去滑动外部RecyclerView

1.4K20

关于RecyclerView你知道的不知道的都在这了(上)前言目录正文

而且,它还建议我们,如果我们项目里有复用 RecyclerViewPool 的话,那么开启这个功能会是一个很好的辅助,它可以将这些 item 回收起来给其他 RecyclerView 用。...这样,新的 fragment 里新的 RecyclerView 的 item 就又需要全部重新创建了,如果用这个方法开启了回收工作,那么旧的 fragment 被移除时会触发到 RecyclerView...小结一下,其实也就是 RecyclerView 有更换新的实例对象,这个方法开启的回收工作是有一定的好处的。...首先需要明确,RecyclerView 的回收机制在工作,会先将移出屏幕的 ViewHolder 放进一级缓存中,一级缓存空间已满,才会考虑将一级缓存中已有的 ViewHolder 移到 RecyclerViewPool...相反, Item 移进屏幕内,另一个方法则会回调。 那么,其实,在一定场景下,可以通过这两个回调来处理一些 Item 移出屏幕,移进屏幕所需要的工作

3.1K60

RecyclerView数据动态更新

列表的数据往往会跟随业务逻辑不断刷新,所呈现出来的数据需要动态更新,那么RecyclerView是如何动态更新数据的呢?...之前在学习ListView的时候如果数据改变,需要调用notifyDataSetChanged()方法来刷新数据,而在RecyclerView数据改变时分别调用notifyItemChanged、notifyItemInserted...接下来通过一个案例来学习如何动态更新数据,单击某个item则在其下方插入一个item,如果长压某个item则删除对应item。...); // 获取组件 mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);...其实RecyclerView还提供了几个局部刷新的方法,只需要在删除或插入数据的同时,再刷新改变位置item下方的所有Item的位置即可。

6.2K61

嵌套滑动通用解决方案--NestedScrollingParent2

京东首页 可见,在向上滑动页面tabLayout滑动到顶部,外层RecyclerView停止滑动,此时tabLayout即为吸顶状态,接着会 滑动ViewPager中的内层RecyclerView...根据滑动冲突的相关知识,我们知道一定是外层RecyclerView拦截了触摸事件,内层RecyclerView无法获取事件,就无法滑动了。...所以按照正常处理滑动冲突的思路处理--tab没到顶部,parent拦截事件,tab到顶部 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...作者最后建议使用RecyclerView多布局。 但其实在真实应用中,可能 头部 和 列表 的数据来自不同的接口,列表的数据请求失败要展示缺省图,但头部还是会展示。...先滑动根布局,使得头部隐藏或显示,然后再交给RecyclerView滑动。

3.6K31

关于RecyclerView你知道的不知道的都在这了(下)目录正文

addView 到 RecyclerView 上面,不需要重新去设置数据,因为它原本携带的数据都还处于正常状态,并没有被重置掉。...这样的好处是,某一行被移出屏幕,可以将这一行的每个卡位都回收起来,供其他行使用,而不至于每一行每次都是重新创建。...对于外层 RecyclerView 来说,它的 Item 是每一行的 RecyclerView 控件,所以某一行被移出屏幕,它仅仅是将这一行的 RecyclerView 控件从它本身 remove...7.1 SimpleItemAnimator adapter 数据源发生变化,通知了 RecyclerView 去刷新界面RecyclerView 会去通知 ItemAnimaotr 此时相应的动画行为...再比如,只希望翻页滑动,手指滑动距离小于翻页,自动滑回原位进行翻页等等。

1.2K30
领券