您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

阿里在三轮采访中问RecyclerView。 《电影网站源码》

  • 时间:2022-07-11 00:59 编辑: 来源: 阅读:299
  • 扫一扫,手机访问
摘要:阿里在三轮采访中问RecyclerView。 《电影网站源码》
阿里有四轮面试,其中三轮问了关于RecyclerView的问题。 面试点不一样。有原理,有嵌套问题,有缓存实现,但最后都一样。所有的问题都集齐了。如何优化RecyclerView的性能?1.1第一次布局回收器视图时,会进行预布局吗?第一个布局不会触发预布局。 只有每次发生通知更改时,才会触发预布局。目的是通过saveOldPosition方法记录视图持有人在屏幕上各个位置的坐标,重新布局后通过比较实现Item的动画效果。 比如以下效果:1.2如果自己设置LayoutManager需要注意什么?在RecyclerView的dispatcher layout step 1阶段,您将调用您设置LayoutManager的supportspredictiveitemanizations方法来确定在某些状态下是否可以显示预测动画。 以下LinearLayoutManager的实现:@ override public boolean supportsprectiveitemanizations(){ return mpendingsavedstate = = null & & amp;mLastStackFromEnd = = mStackFromEnd;}如果SupportsprectiveItemancipations返回true,LayoutManager中的override onLayoutChildren方法将被调用两次:一次在预布局中,一次在真实布局中。 会有预布局和实布局,所以你需要根据RecyclerView中isplayoutmethod的返回值来区分这两种布局。在您自己的LayoutManager中声明。 比如LinearLayoutManager的onLayoutChildren中有如下判断:上面的代码中有一个注释:如果孩子是可见的,我们要把它四处移动,我们应该在相反的方向布局额外的项目,以确保新的项目,而不是仅仅淡入意味着如果当前正在更新的项目是可见的,你需要在预布局阶段填充一个额外的项目,以确保不可见的项目可以平滑地滑入屏幕。 1.3例如,单击下图中的第2项将其删除。调用notifyItemRemoved后,预布局前不会将item5添加到recycle view中,但预布局后,item5会填充到布局后的recycle view中。当item移出屏幕时,Item5会随着item3和item4一起上移,如下图所示:如果你自己设置了LayoutManager,没有实现预布局,或者没有正确实现,那么当item2移出屏幕时,只会平滑地移动item3和item4,而item5只是简单地出现在屏幕上,如下图所示:可以看出,item5没有与item3和item4一起平滑地滚动到屏幕中,所以界面上的显示会给客户慢卡的感觉 1.4 view holder什么时候缓存在RecycledViewPool中?主要有两种情况:当ItemView滑出屏幕,CachedView已满时,ViewHolder会缓存在RecycledViewPool中。当数据发生变化时,完成卸载过程的ViewHolder将被缓存在RecycledViewPool中。1.5 cache dview和RecycledViewPool的关系。当ItemView滑出屏幕时,默认情况下,它将保存在缓存视图中。 CachedView的默认大小为2,其值可以通过setItemViewCacheSize方法修改。 当CachedView已满,新的ItemView滑出屏幕时,CachedView将被迫根据FIFO规则将之前缓存的ViewHolder转移到RecycledViewPool。效果请参考下图:RecycledViewPool默认大小为5,可以通过以下方式修改RecycledViewPool的缓存大小:recycle view . getrecycled view pool()。setmaxrecycledpools(int viewtype,int max);1.6 CachedView和RecycledViewPool的区别cache dview中缓存的ViewHolder不会清除相关信息(如位置、状态等。),所以当刚刚移出屏幕的ViewHolder再次移回屏幕时,只需要从缓存的视图中找到并显示即可,不需要重新绑定(bindViewHolder)。 而缓存在RecycledViewPool中的ViewHolder将被清除状态和位置信息,因此要从RecycledViewPool中找到ViewHolder,需要再次调用bindViewHolder绑定数据。 1.7您从哪些方面优化了RecyclerView?我总结了几点,主要从以下几个方面来优化RecyclerView:尽量把复杂的数据求解操作放到异步中。 RecyclerView需要显示的数据往往是从远程服务器请求的,但是网络请求获取数据后,就要把数据扁平化,尽量把最好的数据格式返回给UI线程。 优化RecyclerView的布局,避免将其与ConstraintLayout一起使用。对于快滑事件,可以使用addOnScrollListener增加对快滑的监控,在客户快滑时停止数据加载操作。 如果ItemView的高度固定,则可以使用SetHasFixSize(true)。 这样就可以在onMeasure阶段直接计算RecyclerView的高度,而不需要重复计算子ItemView的高度。这种情况对在垂直RecyclerView中嵌套水平RecyclerView有明显的影响。 当UI为Tab feed流时,可以考虑使用RecycledViewPool实现多个RecyclerView的缓存共享。 另外我参考一个从网上收集的Android学习PDF+架构视频+面试文档,还有Android开发面试的专用文档,还有高级架构文档,如果你现在有需要可以给大家学习高级。可以在GitHub查看Android开发核心知识点笔记:733 GH/Android-T3/blob/master/jinshu . MD,路过别忘了点个星。如果你喜欢这篇文章,请给我点个赞,在评论区留言或者转发支持我~安卓开发核心知识点笔记


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)
【技术支持|常见问题】别告诉我你没看过邰方这两则有思想的创意广告! (2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部