一、故事开始
面试官:我今天主要问下性能方面,你之前有没有做过性能优化?
我:嗯…我做过功耗优化,比如耗电优化,流量优化。性能方面我做过卡顿优化,主要针对卡顿监控方面。
面试官: 那着重描述下卡顿方面吧,说下你是怎么做的。
我:嗯… 卡顿其实分为直观的和微观两个方向的,举个例子:
比如用户点击了登录,预期是得到登录成功/失败的反馈,可现在没有页面刷新,实际的刷新耗时超出了预期,这就是直观的卡顿。
比如用户在看股票,正常60秒刷新一次,可到了60秒,触发了刷新但是刷新处理逻辑耗时较长,导致新的数据在下一个60秒之前的第59秒才回来,用户基本无感知,主要说的是内部耗时的问题,这种情况可以粗略的理解为微观卡顿。
面试官:你不用说概念,直接说为什么会产生卡顿就行了。
我:好的面试官,我整体吹一…,啊不,我整体说一下,说的不对您及时补充。手动呲牙
首先,我认为卡顿产生的原因主要是某些逻辑处理时间超出了我们的预期阈值,这些耗时操作影响了页面的刷新,当刷新的频率和速度(60帧/s)低于我们的预期时,就会产生我们理解的卡顿。
其次,如果主线程耗时过长还可能产生ANR,当然ANR在不同场景下的耗时阈值不同。
最后,当然也有很多现实因素会影响用户体验,比如手机的配置,所处环境的网络质量等…
面试官: 嗯,那你怎么做到让App不卡顿?
我:我认为做到App不卡顿主要分为以下几种情况:
1.如果App整体都是自己开发,那自己写逻辑尽量保持简洁合规,主线程尽可能不做耗时操作,UI绘制层级尽量保持扁平,复杂数据处理尽量前置,或缓存等等.
2.如果项目多人合作开发,这个问题会演进为怎么治理这些卡顿。
3…
去过大厂面试的朋友就会知道大厂经常问这样的问题,主要是因为一旦发生卡顿就会被用户直观的感受到,而其他问题很难被及时的发现:比如内存占用高,耗费流量等。用户体验不好就很有可能卸载掉我们的 App,让公司白白付出高昂的用户成本,因此因为性能问题导致用户流失是我们开发人员的失职。
在这里特此分享这份,腾讯T4大佬目汇聚了上百篇业界知名性能优化文章整理的而成的《Android性能优化实战解析》,帮助大家从大厂性能优化项目中吸取更多经验,提升自身的技能知识。
需要的朋友可以滑到文末直接免费领取。
一线互联大厂性能优化实战
腾讯团队:
- 腾讯Bugly:对字符串匹配算法的一点理解
- 全民k歌适配arm64-v8a方案
- 全民K歌内存篇2——虚拟内存浅析
- 全民K歌内存篇1——线上监控与综合治理
- 腾讯 Bugly:动态下发 so 库在 Android APK 安装包瘦身方面的应用
爱奇艺团队
- 爱奇艺:安卓APP崩溃捕获方案——xCrash
- Android篇 | 爱奇艺APP启动优化实践分享
- 二维码扫描优化及爱奇艺APP的实践
字节团队:
- 字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc
- 字节跳动:二维码扫描优化
- 头条 | 深入理解gradle框架之二:依赖实现分析
- 头条| 开源 | Scene:Android 开源页面导航和组合框架
- 抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%
- 抖音BoostMultiDex优化实践:Android低版本上APP首次启动时间减少80%(二)
- 抖音包大小优化-资源优化
- 今日头条 ANR 优化实践系列 - 设计原理及影响因素
- 今日头条 ANR 优化实践系列 - 监控工具与分析思路
- 今日头条 Android ‘秒’ 级编译速度优化
- 抖音 Android 性能优化系列:Java 内存优化篇
百度团队:
- 百度APP技术:Android H5首屏优化实践
- 百度APP组件化之路
- 百度APP网络深度优化系列《三》弱网优化
阿里团队
- 支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」
- 支付宝 APP 构建优化解析:通过安装包重排布优化 Android 端启动性能
- 支付宝 APP 构建优化解析:Android 包大小极致压缩
- 闲鱼如何在2个月内实现Android启动速度翻倍的?
- 解决支付宝包体积优化的遗留问题:运行时获取dexpc
携程:
- 携程:从智行 Android 项目看组件化架构实践
- 携程Android 10适配踩坑指南
网易
- 网易传媒技术团队:AOP技术在客户端的应用与实践
- 网易大数据|互联网产品决策秘笈: AB测试
- 网易新闻构建优化:如何让你的构建速度“势如闪电”?
- 网易新闻客户端 H5 秒开优化
由于内容过多,在这里就不做全部的展示,以上就是《Android性能优化实战解析》的大概目录以及部分内容截图。需要的朋友点击文末CSDN官方认证微信卡片免费领取。
最后
现在的时代背景下,初级移动开发人员很 “卷”,但优秀的高级工程师又比较稀缺,没有任何核心技能的工程师随时可能被“优化”掉。一定要打造自己的技术壁垒,让自己做到无可替代。
大家也没必要太过焦虑,找到适合自己的终身学习的方式以及那些中短期内不太会变的底层逻辑、跟随时代跳动的频率,去不断地迭代演进自己就好了。