前言
刚入行Android系统开发两年,发现在项目维护和需求开发的时候仅仅考虑快速解决,而没有深入理解其设计思想和思考高效稳定的解决方法,毕竟framework修改直接影响系统的稳定性,任何问题的修改,需要慎重。随着项目的开展和积累,越发觉得需要深入学习理解framework的设计,下面是网上和相关书籍总结的学习思路,仅仅在此汇总下。
一、阅读Android源码的术与道:
1、Android源码的道
Android的功夫,在Android之外。要想“理解”而非单纯的“知道”,想“学习”而非单纯的“记诵”。必备基础:信息检索能力、编程语言(C\C++、Java)、计算机系统知识、设计模式、JVM,多线程设计
2、Android源码的术
针对每一个模块本身的职责,询问更细节的实现,永远记住,先有的问题,之后才有的代码。代码实现是新鲜的,但是有了之前的铺垫和对问题的预期,它们的出现才是可理解的。
总结:先理解模块对应的要解决的“问题”是什么,再去给问题找解决方案的思路去理解源码;
理解源码的功夫不止在Android本身,也要提高Android之外的姿势水平。
二、Framework需求开发与维护注意点
1、需求开发
1) 相关功能的现有模块需要非常熟悉,否则会有非常大的风险
2 )所写代码尽量与已有类似的代码保持风格一致
3 )必要的注释,写代码的时候认为代码的意图貌似是理所当然,但是当别人看你的代码或者过一段时间你自己查阅代码的时候,很有可能由于代码量过大,在代码的海洋中未必容易理解某一段代码的意图
4 )找比自己能力强的,经验较为丰富的同事review代码。系统层毕竟是上层应用的基础,必须保证其极高的稳定性,不像app即使有一些bug可以快速的迭代和发版推送。
2、维护
1 )优秀的代码设计。Android的代码加工的顺序大致是Google源码->芯片厂商的修改->OEM厂商的修改。这些代码里积累了大量世界级优秀的代码设计方式,架构思想,这样咱们对代码的学习和认识的起步就是不低的,所以阅读大量的代码过后,我们再尝试写代码的时候,一般也不会写出低质量的代码
2 )分析定位的技巧。一个经验丰富的工程师的价值,主要会体现在遇到问题时,能够分析定位解决问题的能力和效率,而很少会听说我这有个20年经验的工程师,他的价值在于别人一个小时能写成的代码他在一分钟就写出来了。
刚踏入framework层维护开发的时候所需要注意和经历的阶段:
第一阶段:熟悉各种基本工具的使用,比如linux,git,sourceinsight,svn等等,当然基本的编程知识需要有,如果如java之类的使用都还不是很熟,建议先回家读书
第二阶段:对所需要维护模块的代码逐渐熟悉起来,可以通过定位问题来梳理代码流程,当然此时主要是通过log定位
第三阶段:这个阶段往往是一个瓶颈,因为可以直接通过Log定位的问题占大多数,这时候很多人就会自我感觉良好,也逐渐形成了惰性不再追求更多的知识,并且还会认为自己已经熟悉了很多的模块。比如你按照这种方式工作了五年,我保证你再出去也找不到工作,因为你并没有五年的工作经验,只是使用了一个月能达到的经验工作了五年!!!看代码,梳理流程,这是最基本的工作模式,这个时候我们追求更“牛逼”的分析手段,比如使用性能分析工具systrace和traceview,比如Google提供的功耗分析工具buttery historal2.0,比如ddms里的内存分析工具mat和层级观察器工具(能够直接对应到UI上)
第四阶段:追求性能稳定性的问题解决
第五阶段:Android整体架构,对方案设计的优劣有自己的认识,并且能提出更好的改进方案
三、阅读源码时候的注意点
开始看的时候要忽略细节,跟着流程走。工作原理一般都可以文字描述,如何实现的,跟着函数调用一步一步套,流程通了,细节就不在话下了。
看不懂的多读、不重要的少读、边读边思考、不是所有的都需要思考、记得做笔记。
1、高度抽象,构建框架
2、重要函数,深究细节
3、善用工具,及时总结
这里我整理了一份 Android framework 全家桶学习资料分享给大家学习扫码免费领取完整文档
《Android Framework 精编内核解析》
目录
第一章 深入解析Binder
● 第一节 Binder系列—开篇
● 第二节 Binder Driver初探
● 第三节 Binder Driver再探
● 第四节 Binder启动ServiceManager
● 第五节 获取ServiceManager
● 第六节 注册服务(addService)
● 第七节 获取服务(getService)
● 第八节 Framework层分析
● 第九节 如何使用Binder
● 第十节 如何使用AIDL
● 第十一节 Binder总结
● 第十二节 Binder面试题全解析
第二章 深入解析Handler消息机制
● 第一节 宏观理论分析与Message源码分析
● 第二节 MessageQueue的源码分析
● 第三节 Looper的源码分析
● 第四节 Handler的源码分析
● 第五节 Handler机制实现原理总结
● 第六节 Handler面试题全解析
第三章
Dalvik VM进程系统
● 第一节 Android系统启动-综述
● 第二节 Init篇
● 第三节 zygote篇
● 第四节 SystemServer上篇
● 第五节 SystemServer下篇
第四章 深入解析WMS
● 第一节 WMS概述
● 第二节 WMS的诞生