Android Framework学习方法汇总

  • Post author:
  • Post category:其他




前言

在这里插入图片描述

刚入行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 精编内核解析》




目录

img
img




第一章 深入解析Binder

​ ● 第一节 Binder系列—开篇

​ ● 第二节 Binder Driver初探

​ ● 第三节 Binder Driver再探

​ ● 第四节 Binder启动ServiceManager

​ ● 第五节 获取ServiceManager

​ ● 第六节 注册服务(addService)

​ ● 第七节 获取服务(getService)

​ ● 第八节 Framework层分析

​ ● 第九节 如何使用Binder

​ ● 第十节 如何使用AIDL

​ ● 第十一节 Binder总结

​ ● 第十二节 Binder面试题全解析

img




第二章 深入解析Handler消息机制

​ ● 第一节 宏观理论分析与Message源码分析

​ ● 第二节 MessageQueue的源码分析

​ ● 第三节 Looper的源码分析

​ ● 第四节 Handler的源码分析

​ ● 第五节 Handler机制实现原理总结

​ ● 第六节 Handler面试题全解析

img




第三章


Dalvik VM进程系统

​ ● 第一节 Android系统启动-综述

​ ● 第二节 Init篇

​ ● 第三节 zygote篇

​ ● 第四节 SystemServer上篇

​ ● 第五节 SystemServer下篇

img




第四章 深入解析WMS

​ ● 第一节 WMS概述

​ ● 第二节 WMS的诞生

img



版权声明:本文为bugyinyin原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。