前言

回顾一下自己这段时间的经历,因公司突然通知裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。公司开始第二波裁员,我决定主动拿赔偿走人。后续的面试过程我做了一些准备,基本都能走到hr面,后面我也顺利地拿到了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 预留的额外空间(显示范围之外,应该额外缓存的空间)

学习分享

在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2021最新上万页的大厂面试真题

七大模块学习资料:如NDK模块开发、Android框架体系架构…

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

这份体系学习笔记,适应人群:
**第一,**学习知识比较碎片化,没有合理的学习路线与进阶方向。
**第二,**开发几年,不知道如何进阶更进一步,比较迷茫。
**第三,**到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!

由于文章内容比较多,篇幅不允许,部分未展示内容以截图方式展示 。如有需要获取完整的资料文档的朋友点击我的【GitHub】免费获取。

%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】免费获取。

深入讲解Android!最全的BAT大厂面试题整理,威力加强版相关推荐

  1. 2020最全的BAT大厂面试题整理改版

    最全的BAT大厂面试题整理 版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.jianshu.com/p/c70989bd5f29 转载请标明出处: https://www. ...

  2. 【大牛疯狂教学】2020最全的BAT大厂面试题整理改版

    最全的BAT大厂面试题整理 版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.jianshu.com/p/c70989bd5f29 转载请标明出处: https://www. ...

  3. 腾讯T3手把手教你!2020最全的BAT大厂面试题整理改版

    最全的BAT大厂面试题整理 版权声明:本文为博主原创文章,未经博主允许不得转载.https://www.jianshu.com/p/c70989bd5f29 转载请标明出处: https://www. ...

  4. 2020最全的BAT大厂面试题整理改版3面直接拿到offer

    开头 从事Android开发工作多年,走过的弯和坎,经历的心酸难与外人道也. 我个人感触最深的就是:选择大于努力.选择正确的方向,你才能够走的更远,更坚定. 以前雷总说过,"在风口猪都能飞起 ...

  5. 2022最全的BAT大厂面试题整理及分析

    又是一年的金三银四,又到了面试求职高峰期,最近有很多网友都在求大厂面试题.正好我之前电脑里面有这方面的整理,于是就发上来分享给大家. 这些题目是网友去百度.小米.乐视.美团.58.猎豹.360.新浪. ...

  6. 总结2022最全的BAT大厂面试题整理及分析

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1qxiskF-1660644075912)(https://upload-images.jianshu.io/uplo ...

  7. 最全的BAT大厂面试题整理,“干完”这份300页1000道面试题,大厂Offer拿到手软

    转载请标明出处: https://www.jianshu.com/p/c70989bd5f29 本文出自 AWeiLoveAndroid的博客 临近年关,又到了面试求职高峰期,最近有很多网友都在求大厂 ...

  8. 由浅入深!华为Android面试真题解析,最全的BAT大厂面试题整理

    Android开发者该如何提升自己? 说说我的两点建议: 1.横向发展:(适合有自己专精技术的人) 在自己擅长领域深入钻研的同时,会Hybrid开发(Flutter,RN,H5)之外,会web开发.微 ...

  9. 安卓chrome插件开发!你有过迷茫吗?最全的BAT大厂面试题整理

    写在前面 为什么只看这一篇就够了? 现在CSDN.知乎.掘金上各路大佬层出不穷,他们身经百战.血洗杀场,总结出满满的求职干货.但同时也存在很多非良心的博主,要么活出了人类的本质,复读机一样到处转载:要 ...

最新文章

  1. RotateAnimation详解
  2. MFC Ribbon风格界面去掉左上的Quick Access Toolbar小三角
  3. LVS集群-DR负载均衡集群
  4. ps人像精修照片步骤_ps修图教程:人像精修
  5. Eclipse Debug maven test
  6. 这几年人工智能和大数据的真实就业规律
  7. 分类算法中的ROC与PR指标
  8. 关于JavaScript,这10条血与泪的建议大家一定要看
  9. EAGER的获取是代码的味道
  10. C学习杂记(五)形参实参笔试题
  11. 每日一题(45)—— 字符数组找错
  12. 【LeArm】动手实践机械臂(一)
  13. java 定义接口 xml_Java接口对接二(URL方式之xml,json,form)
  14. 高德地图,根据经纬度定位到某个地方(位置标注)
  15. Android中跳转到系统设置界面
  16. 数字逻辑电路——第四章 组合逻辑电路
  17. 受力分析软件_学了那么多力学,怎么还是不会做有限元分析?
  18. cgb2110-day02
  19. axios请求拦截器 和 响应拦截器
  20. ctfshow SSRF web351-web360 wp

热门文章

  1. php word权限设置密码,在php中加密和解密word docx文件的问题
  2. Apache CXF 介绍
  3. (wps)表格下拉选择多个选项
  4. 奥的斯服务器设置楼层运行,奥的斯服务器PPT
  5. 完成GitHub上squirrel 的运行(数据库的模糊测试)
  6. CODING 敏捷实战系列加餐课:CODING 做敏捷这一年 - 理解一站式 DevOps 产品思想
  7. [云原生专题-29]:K8S - 核心概念 - 名字空间/命名空间概念详解与主要操作案例
  8. 杨绛:她和谁都不争,和谁争都不屑
  9. 软考高级软件架构师学习笔记二(软件工程)
  10. 音频格式(一)PCM和WAV