一个字!爽!
================================================================
去年金三银四帮公司面试的时候认识了一个挺有意思的朋友,他是专科学历,非科班出身的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)
最后
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
同时我经过多年的收藏目前也算收集到了一套完整的学习资料以及高清详细的Android架构进阶学习导图及笔记分享给大家,希望对想成为架构师的朋友有一定的参考和帮助。
下面是部分资料截图,诚意满满:特别适合有开发经验的Android程序员们学习。
不论遇到什么困难,都不应该成为我们放弃的理由!
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
!
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。