学习分享
①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
其实此前我司并不是没有尝试做过性能优化,只不过用的都是市面上比较常见的方案。
对于内存优化:
-
我们使用了 LeakCanary来在开发阶段发现内存泄露;
-
对于大家提交的代码,我们有一套静态检测机制,来发现一些常见的内存泄露的 case,例如 Cursor 没关闭,io 没关闭等等;
-
我们还有一些Code Review 机制,来发现常见的一些内存泄露,例如单例持有了 Activity对象,以及一些内存抖动的 case,比如在 onDraw 里面频繁的创建对象;
相信这些也是大多数同学现在所处项目所实施的方案,那为什么做了这么多,线上的性能问题还是一塌糊涂呢?
因为我们仅仅处理了“明面”上的问题。
为什么这么说呢?
对于内存,想要彻底的了解它,仅依赖一些写代码时的指导建议、以及 LeakCanary 去发现页面相关泄露是不足够的。
例如很多单例对象持有大量内存,例如:一些同学为了做页面打开速度,疯狂做数据缓存;一堆 Bitmap 留在内存中常驻。
想要了解全貌,该怎么做呢?
分析用户运行之后的内存快照。
大多数同学可能会说,我们也有分析内存的,比如我会在 Android Studio 的 Profiler 中对内存情况进行分析,以及我还会利用 MAT 去详细的查看内存。
这种分析确实能发现当时所处机器在特定路径上的内存问题。
但是,线上用户不同:
线上用户机器硬件配置多变,其实最主要的是线上用户的用户行为、操作路径,我们很难完全知道,等到用户 OOM 之后,报上来的堆栈,仅仅是最后申请内存达到阈值的崩溃,实际上根本的原因可能根本不在那最后一次内存申请。
如下图:
错误发生在 b.xf 第五行,导致OOM的原因,到底是此处申请了太大的内存,还是其他地方申请了太多内存导致可用内存不足亦或者程序存在内存抖动问题,导致连续内存不足,我们不得而知。
所以,我们需要线上内存监控。
对于卡顿:
我们也经常收到用户说,app 卡死了,研发对于「卡死」第一反应是不是 ANR 了?
其实用户可能只是说页面不流畅而已。
当然不管是不流畅、还是 ANR,对于客户端同学来说,都是比较难解的问题。
难解在于两点:
-
不知道用户的行为路径,ANR 还好,可能还会上报一些 ANR_INFO,不流畅可能什么信息都没有,只能看看用户的机型是不是低端机,然后问下用户的操作路径。
-
没有线上卡顿检测埋点,一般开发时我们用的都是高端机,很多卡顿是感知不出来的,而且线上我们 debug环境下打印的一些埋点信息对于线上完全起不到作用。
所以,我们需要线上卡顿监控。
文末
那么对于想坚持程序员这行的真的就一点希望都没有吗?
其实不然,在互联网的大浪淘沙之下,留下的永远是最优秀的,我们考虑的不是哪个行业差哪个行业难,就逃避掉这些,无论哪个行业,都会有他的问题,但是无论哪个行业都会有站在最顶端的那群人。我们要做的就是努力提升自己,让自己站在最顶端,学历不够那就去读,知识不够那就去学。人之所以为人,不就是有解决问题的能力吗?挡住自己的由于只有自己。
Android希望=技能+面试
- 技能
- 面试技巧+面试题
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
以戳这里获取](https://bbs.csdn.net/topics/618156601)**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!