一个字!爽!
================================================================
去年金三银四帮公司面试的时候认识了一个挺有意思的朋友,他是专科学历,非科班出身的Android程序员。
他来了三个月后,对我们公司的那堆历史代码做了一波优化,将整体 OOM 与卡顿问题降低了77%,让公司的APP稳定性数据提高 50%,大幅提升了用户体验,一鸣惊人。
其实此前我司并不是没有尝试做过性能优化,只不过用的都是市面上比较常见的方案。
对于内存优化:
-
我们使用了 LeakCanary来在开发阶段发现内存泄露;
-
对于大家提交的代码,我们有一套静态检测机制,来发现一些常见的内存泄露的 case,例如 Cursor 没关闭,io 没关闭等等;
-
我们还有一些Code Review 机制,来发现常见的一些内存泄露,例如单例持有了 Activity对象,以及一些内存抖动的 case,比如在 onDraw 里面频繁的创建对象;
相信这些也是大多数同学现在所处项目所实施的方案,那为什么做了这么多,线上的性能问题还是一塌糊涂呢?
因为我们仅仅处理了“明面”上的问题。
为什么这么说呢?
对于内存,想要彻底的了解它,仅依赖一些写代码时的指导建议、以及 LeakCanary 去发现页面相关泄露是不足够的。
例如很多单例对象持有大量内存,例如:一些同学为了做页面打开速度,疯狂做数据缓存;一堆 Bitmap 留在内存中常驻。
想要了解全貌,该怎么做呢?
分析用户运行之后的内存快照。
大多数同学可能会说,我们也有分析内存的,比如我会在 Android Studio 的 Profiler 中对内存情况进行分析,以及我还会利用 MAT 去详细的查看内存。
这种分析确实能发现当时所处机器在特定路径上的内存问题。
但是,线上用户不同:
线上用户机器硬件配置多变,其实最主要的是线上用户的用户行为、操作路径,我们很难完全知道,等到用户 OOM 之后,报上来的堆栈,仅仅是最后申请内存达到阈值的崩溃,实际上根本的原因可能根本不在那最后一次内存申请。
如下图:
错误发生在 b.xf 第五行,导致OOM的原因,到底是此处申请了太大的内存,还是其他地方申请了太多内存导致可用内存不足亦或者程序存在内存抖动问题,导致连续内存不足,我们不得而知。
所以,我们需要线上内存监控。
对于卡顿:
我们也经常收到用户说,app 卡死了,研发对于「卡死」第一反应是不是 ANR 了?
其实用户可能只是说页面不流畅而已。
当然不管是不流畅、还是 ANR,对于客户端同学来说,都是比较难解的问题。
难解在于两点:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
最后
题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在IT学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多程序员朋友无法获得正确的资料得到学习提升,故此将并将重要的Android进阶资料包括自定义view、性能优化、MVC与MVP与MVVM三大框架的区别、NDK技术、阿里面试题精编汇总、常见源码分析等学习资料。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android进阶学习视频】、【全套Android面试秘籍】
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
希望我能够用我的力量帮助更多迷茫、困惑的朋友们,帮助大家在IT道路上学习和发展
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!