一直以来,Android性能优化都是面试过程中考察的热点题目。
相关的技术博客也层不出穷,我们总是能找到很多这样的文章,
从一个应用的各个层面开始分析,优化的种种手段,取得的种种效果。
往往篇幅越长,讲得越细,越受欢迎。
但在面试的时候,问这类问题时,候选人经常答得不尽人意,大部分人会把自己能想起来的优化措施,给背一遍。
背得越多越好,对于候选人自己说,内心也发虚,背完之后面试官毫无表情,因为这并不是他们想要的答案。
我们不妨从面试官的角度来思考。
性能优化有哪些难题
难点一:性能表现差
性能优化的第一个难题是APP的自身性能表现差,这是从APP自身性能使用来说的:
- 第一种问题是用户可以直观的感受到,比如说:APP启动慢、卡顿、丢桢等,用户肯定会报怨手机太卡了!
- 第二种问题是用户虽然不会直观的感受到,比如说:内存占用高,抖动频繁,但是这种隐藏的问题可能会导致内存溢出,从而影响程序的正常运行
- 此外性能问题还有应用耗电、网络请求慢、崩溃率和异常率高
其中崩溃率和异常率属于稳定性的范畴,崩溃率比较好理解需要注意的是应用异常率。异常是指APP不能正常的作出反应,比如说我们点击了一个按钮,它并没有正确的跳转到下一个界面,此时APP并没有崩溃,但是同样它也处于不可用的状态,带来的非常不好的用户体验。
难点二:线上问题无法排查
线上问题排查困难对于很多Android程序员来说就是个烧(tuo)脑(fa)的问题,下面来说说线上问题排查的主要难点!
性能优化的第一个难题是线上问题无从排查,这是从排查问题的视角来说, 通俗来讲的是耽误线上出现了异常时我们如何才能够保证较高的异常感知灵敏度。
当我们发布了一个新版本或者上线了一个新功能没有用户反馈,我们也千万不能够认为已经成功上线了,因为仅仅依赖于用户反馈这个单一的渠道非常容易错过异常出现的第一时间,等到有用户不堪忍受来反馈造成的损失已经太大,而且也已经错过最好的处理时机。
线上问题排查的第二个难点:如何复原案发现场, 假设用户给了我们反馈但是此刻我们也不能够高兴过早。因为用户有反馈不代表我们一定能够复现,很多问题并不是所有用户都会发生,发生了这种特殊问题的用户,他可能是使用了特殊的设备或者是他的账户处于特定的异常状态。等到我们在公司用自己的设备和自己的账户去复现他的问题的时候很有可能会因为条件不足而无法复现,自然也就没有办法快速解决。
线上问题的第三个难点:如何快速修复成功, 针对线上问题而言时间就是生命必须尽早的成功修复。在我们修复之后,为了保险起见一般都会开放部分小流量用户或者找特定用户来进行测试。但是如果说我们的手段是连续用户重新安装然后等待结果,这样的解决方案它的周期实在是太长,而且多次下来后用户也会有些反感,最终可能找不到配合你要用户。
综上所述性能优化都是难以定位和解决的,那么如何在面试官面前脱颖而出呢?
这时候一线互联网大厂性能优化项目实战便成为了Android开发工程师参考的重点对象,从问题中找出自己的缺陷,吸取更多项目经验,提升自身的技能知识。因此在这分享这份《Android性能优化实战篇》,让每一个想进入 Android 系统开发和优化这个领域的人,能通过这份笔记手册快速入门,同时也算是对知识的一个梳理,查漏补缺,终身学习(文末直接获取)。
全一线互联大厂性能优化实战
腾讯团队:
- 腾讯Bugly:对字符串匹配算法的一点理解
- 全民k歌适配arm64-v8a方案
- 全民K歌内存篇2——虚拟内存浅析
- 全民K歌内存篇1——线上监控与综合治理
- 腾讯 Bugly:动态下发 so 库在 Android APK 安装包瘦身方面的应用
- QQ音乐Android编译提速之路
爱奇艺团队
- 爱奇艺:安卓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 秒开优化