想学framework的看过来,做过三年framework,自身总结了一套学习方法

Posted Android老皮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了想学framework的看过来,做过三年framework,自身总结了一套学习方法相关的知识,希望对你有一定的参考价值。

做过三年framework,自身总结了一套学习方法,大致如下三点。勤加练习,一般性模块可以看的非常快。

1、高度抽象,构建框架
2、重要函数,深究细节
3、善用工具,及时总结

android源码非常庞大,但设计很精妙。纵向分层,横向模块化,使得整个源码更易更新和维护。在手机厂商做framework的更倾向于说自己是做Android系统的,维护的模块主要包括ActivityManagerService、WindowManagerService、PackageManagerService、PowerManagerService、SurfaceFlinger、通信模块、多媒体模块等。Android系统良好的模块化设计使得各个模块负责人只需搞懂自己的模块就可以胜任工作。但是搞定自己的模块并不那么容易,对于新人一般要大概做半年才能掌握其精要,有的做了一年发现还有很多点没有掌握,这也是很常见的。

首先必须了解一些背景知识。1.Android系统采用C/S架构;2.绝大部分IPC通信采用Binder通信;3.核心Service大多运行在System_server进程;4.核心Service代码大部分都在frameworks/base/services目录下;5.别一上来就看Binder!!!6.别一开始看源码就钻牛角尖!!!

以下便是我的学习方法,不保证适合其他人,供参考。

1、首先,大概了解下该Service是干什么的。我会搜一些好的分析文章收藏起来,大概浏览下该Service为上层应用提供了什么功能?(这些文章并不会去挨个读,这跟绝大多数人习惯不一样,他们一般是一边看分析文章一边看源码)。在源码里找到源码文件,大概看下核心几个文件开头的注释,注释一般会说的非常清楚这个是干嘛的。(我用source insight看源码)

2、然后,可以尝试写一个小demo,方便调试Service内部方法或抓取系统日志来追踪代码流程。运行在system_server进程中的Java代码均可使用Android studio调试,当然必须是自己编译的image才行。MTK平台手机部分service是可以通过adb shell dumpsys XXX log XX来开启对应service的log

3、接着,从核心API调用入手,一步一步分析源码,理出一个从应用端到Service端,最后回到应用端的函数调用链。这条调用链必定很长很长,有非常多的分支,还会出现非常多的类,这个时候就要抓住主线不放,细枝末节可以不管。借助UML工具了,一般画两个图就够了,一个是类图,一个是时序图。画图要精简,只画重要的主线分支时序图和主要的类关系。这个步骤最难的是理出主线分支调用,切记钻牛角尖偏离目标任务,只需理出一个client–>service–>client的框架即可。将时序图画出来后,整个框架便构建出来了。(我用starUML工具)

4、然后,在上面的框架中必定有几个非常关键的函数,把它搞定。搞定方法就是一行一行读代码,读懂每一行并不容易,需要联系上下文进行理解。从重要函数中要理清service是如何管理target的,比如AMS是使用Stack和Task来管理Activity的,使用两个队列来处理广播,扮演连接者将client和目标ContentProvider建立起连接等。这个过程也是最花时间的,因为你需要从源码里面尽可能地还原作者的设计思想,还原的越彻底,理解的越透彻。一般我是一边理解一边用笔记记录自己的理解。(我用有道云笔记)

5、最后,整理出一篇笔记,方便以后回顾。在前面两步做完,图有了,分析也有了,稍微整理下便成了一篇文档。一般情况下是这样的,今天你理解的差不多了,一个月后你估计只记得大概个轮廓,细节全忘了,两个月后估计连轮廓都忘了。相信我,这时最管用的就是那两个图了,一看就能让你想起80%,所以我非常喜欢画类图和时序图。

而下面便是我自己整理出来的一份笔记资料。

笔记

第一章 深入解析Binder

第一节Binder系列—开篇
第二节Binder Driver初探
第三节Binder Driver再探
第四节Binder启动ServiceManager
第五节获取ServiceManager
第六节注册服务(addService)

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

第一节 宏观理论分析与Message源码分析
第二节MessageQueue的源码分析
第三节Looper的源码分析
第四节handler的源码分析
第五节Handler机制实现原理总结
第六节Handler面试题全解析

第三章Dalvik VM进程系统

第一节Android系统启动-综述
第二节Init篇
第三节zygote篇
第四节SystemServer上篇
第五节SystemServer下篇

第四章深入解析WMS

第五章PackageMS启动

PackageMS相关框架类
PackageMS启动过程

需要我的笔记的可以在下方二维码中免费领取。

以上是关于想学framework的看过来,做过三年framework,自身总结了一套学习方法的主要内容,如果未能解决你的问题,请参考以下文章

Flink 推动者莫问:扛过三年双 11,团队半年贡献 120 万行开源代码

三年程序员...给想学python编程的一些建议...

三年程序员...给想学python编程的一些建议...

三年程序员...给想学python编程的一些建议...

一个有灵性的人,突破自我,往往就在一瞬间

外包干三年,必废!