前言

本来已经在为去大厂工作摩拳擦掌的Android开发者们,今年显得格外艰难:

  • 待就业数高达874万!人才竞争加剧!
  • 疫情让大多数公司的招聘需求缩减!人才招聘要求愈来愈高!

别说offer,现在出门零活都难难难…

“之前的工作,我得到了啥?”

“除了不断稀疏的头发,和越来越重的黑眼圈,还有啥?”

数据处理和视图加载分离

我们知道,从远端拉取数据肯定是要放在异步的,在我们拉取下来数据之后可能就匆匆把数据丢给了 VH 处理,其实,数据的处理逻辑我们也应该放在异步处理,这样 Adapter 在 notify change 后,ViewHolder 就可以简单无压力地做数据与视图的绑定逻辑,比如:

mTextView.setText(Html.fromHtml(data).toString());

这里的 Html.fromHtml(data) 方法可能就是比较耗时的,存在多个 TextView 的话耗时会更为严重,这样便会引发掉帧、卡顿,而如果把这一步与网络异步线程放在一起,站在用户角度,最多就是网络刷新时间稍长一点。

数据优化

分页拉取远端数据,对拉取下来的远端数据进行缓存,提升二次加载速度;对于新增或者删除数据通过 DiffUtil 来进行局部刷新数据,而不是一味地全局刷新数据。

布局优化

减少过渡绘制

减少布局层级,可以考虑使用自定义 View 来减少层级,或者更合理地设置布局来减少层级,不推荐在 RecyclerView 中使用 ConstraintLayout,有很多开发者已经反映了使用它效果更差,相关链接有:Is ConstraintLayout that slow?、constraintlayout 1.1.1 not work well in listview。

减少 xml 文件 inflate 时间

这里的 xml 文件不仅包括 layout 的 xml,还包括 drawable 的 xml,xml 文件 inflate 出 ItemView 是通过耗时的 IO 操作,尤其当 Item 的复用几率很低的情况下,随着 Type 的增多,这种 inflate 带来的损耗是相当大的,此时我们可以用代码去生成布局,即 new View() 的方式,只要搞清楚 xml 中每个节点的属性对应的 API 即可。

减少 View 对象的创建

一个稍微复杂的 Item 会包含大量的 View,而大量的 View 的创建也会消耗大量时间,所以要尽可能简化 ItemView;设计 ItemType 时,对多 ViewType 能够共用的部分尽量设计成自定义 View,减少 View 的构造和嵌套。

其他

其他并不代表不重要,而是我不能把他们进行分类哈,其中可能某些操作会对你的 RecyclerView 有很大的优化。

  • 升级 RecycleView 版本到 25.1.0 及以上使用 Prefetch 功能,可参考 RecyclerView 数据预取。
  • 如果 Item 高度是固定的话,可以使用 RecyclerView.setHasFixedSize(true); 来避免 requestLayout 浪费资源;
  • 设置 RecyclerView.addOnScrollListener(listener); 来对滑动过程中停止加载的操作。
  • 如果不要求动画,可以通过 ((SimpleItemAnimator) rv.getItemAnimator()).setSupportsChangeAnimations(false); 把默认动画关闭来提升效率。
  • 对 TextView 使用 String.toUpperCase 来替代 android:textAllCaps=“true”。
  • 对 TextView 使用 StaticLayout 或者 DynamicLayout 的自定义 View 来代替它。
  • 通过重写 RecyclerView.onViewRecycled(holder) 来回收资源。
  • 通过 RecycleView.setItemViewCacheSize(size); 来加大 RecyclerView 的缓存,用空间换时间来提高滚动的流畅性。
  • 如果多个 RecycledView 的 Adapter 是一样的,比如嵌套的 RecyclerView 中存在一样的 Adapter,可以通过设置 RecyclerView.setRecycledViewPool(pool); 来共用一个 RecycledViewPool。
  • 对 ItemView 设置监听器,不要对每个 Item 都调用 addXxListener,应该大家公用一个 XxListener,根据 ID 来进行不同的操作,优化了对象的频繁创建带来的资源消耗。
  • 通过 getExtraLayoutSpace 来增加 RecyclerView 预留的额外空间(显示范围之外,应该额外缓存的空间)

最后

文末放一个小福利给大家,点击我的GitHub即可领取

群内有许多技术大牛,有任何问题,欢迎广大网友一起来交流,群内还不定期免费分享高阶Android学习视频资料和面试资料包~

偷偷说一句:群里高手如云,欢迎大家加群和大佬们一起交流讨论啊!

手如云,欢迎大家加群和大佬们一起交流讨论啊!

[外链图片转存中…(img-Cbps8HXp-1614765810492)]

android浏览器!6年菜鸟开发面试字节跳动安卓研发岗,大厂面经合集相关推荐

  1. android状态栏透明!6年菜鸟开发面试字节跳动安卓研发岗,年薪50W

    本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 组件化如何实现,组件化与插件化的差别在哪里,该怎么选型 心理分析:面试官从架构层次 了解求职者是否用过 模块化 组 ...

  2. 二本渣渣6年开发面试字节跳动Android研发岗,被怼的有点惨...

    人们都说,这个世界上有两种人注定单身,一种是太优秀的,另一种是太平凡的. 我一听呀?那我这岂不是就不优秀了吗,于是毅然决然和女朋友分了手. 人们都说,互联网寒冬来了,这个时候还在大面积招人的公司,必然 ...

  3. 字节跳动 | 游戏研发岗第一批笔试(题解)

    字节游戏研发岗笔试第一批:2小时4题,满分一百,不能使用本地ide,代码为acm模式 第一题_走迷宫(20分) 题面 给出长n宽m的迷宫(n和m都在1~500之间),迷宫由0和1组成,1表示有墙不能走 ...

  4. 粉丝经历!湖大毕业工作2年,成功拿下字节跳动后端研发岗offer!

    前言 首先在这里介绍一下这位大佬,他是之前就在看我博客的一个算是粉丝吧,自己是湖大毕业的,自己在学校里面就经常趁着假期去找各种实习的事,非常好学的一个人,平时有什么不懂的就来问我,我也很乐意解答,他是 ...

  5. 字节跳动 python面试_字节跳动数据分析实习岗面试全经历,竟然也会问这样的问题?...

    临近年底,又有不少人跃跃欲试想跳槽了. 但跳槽这个事说容易也容易,投简历总是有人要的,但说难也难,要进大厂,不光要看能力,更要看项目,看背景. 就怕辛辛苦苦准备半天,面试的时候没表现好,直接被刷掉,面 ...

  6. 请画图说明tcp/ip协议栈_5年Android程序员面试字节跳动两轮后被完虐,请查收给你的面试指南 - Android木子李老师...

    大家应该看过很多分享面试成功的经验,但根据幸存者偏差的理论,也许多看看别人面试失败在哪里,对自己才更有帮助. 最近跟一个朋友聊天,他准备了几个月,刚刚参加完字节跳动面试,第二面结束后,嗯,挂了- 所以 ...

  7. java后端简历项目经历_为了面试字节跳动后端开发岗(Java)鬼知道我经历了什么.....

    字节跳动的招聘十分火热,基本上全年都是铺天盖地的宇宙条的招聘信息.但是其实录取率并不高. 无论是找后端方向还是其它方向,我相信整个面试的过程和时间节点都能对你有一定的帮助.字节跳动的面试流程基本上是我 ...

  8. 面试字节跳动,死在了最后一类问题上!

    背景 本人基本情况:本硕普通985学渣,现居深圳,Android研发,目前主语言Java,某小公司工作中.去年面试字节跳动,死在了最后一类问题上,补发面经,希望能对大家有所帮助. 由于面试时间已经较为 ...

  9. 面试字节跳动,被面试官的源码问题问到怀疑人生

    面试字节跳动,被面试官的源码问题问到怀疑人生 最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面 ...

最新文章

  1. uvalive3209City Game
  2. 直播报名 | NVIDIA公开课:Style-Gan的架构与实现
  3. 解决Eclipse中SVN图标不显示
  4. linux centos7清除系统日志、历史记录、登录信息
  5. python 如何将数字字符串转换为数字?
  6. WebService入门篇
  7. BUUCTF-- Linux Labs 1---SSH远程登陆
  8. java对jar包的复制_Java安全之jar包调试技巧
  9. 数据特征分析:2.对比分析
  10. 2017.4.16 阶乘之和 思考记录
  11. [JS+CSS] - 新浪微博滚动特效[兼容FF,Chrome和IE6,7,8]
  12. SpringBoot实战(五):配置健康检查与监控
  13. Squid Analyzer 5.1 发布,Squid日志统计
  14. memcached 可视化客户端工具TreeNMS
  15. worldwind java 教程_科学网—用worldwind java SDK开发应用程序 - 谢安涛的博文
  16. IPTV机顶盒和网络盒子及转换
  17. 专访Wunderlist主设计师Jan Martin:永远不要盲目跟风流行趋势1
  18. 将进酒:《惜樽空》敦煌抄本
  19. Windows11 Store应用商店下载的软件,怎么创建快捷方式
  20. SANER 18 论文阅读- Mining stackoverflow for program repair

热门文章

  1. 企业微信有权限查看通讯录吗?
  2. web前端开发常用的10个高端CSS UI开源框架
  3. MUI-设置沉浸式状态栏
  4. 实现用户输入用户名和密码登录
  5. (win10家庭版)修改C盘Users目录下文件夹名称
  6. js实现加buff功能
  7. Java ffmpeg视频压缩IOS播放没有声音问题解决(超级简单)
  8. 在双GPU(核显+NVIDIA)计算机中正确安装Ubuntu 18.04下的NVIDIA驱动程序(解决循环登录等问题)
  9. 解决苹果手机按钮的圆角问题
  10. zipfile — 访问 ZIP 压缩文件