Framework到底该怎么学习?

作者:qing的世界

相信大家在找工作的时候,肯定或多或少都被面试官问到过安卓的八股文。比如ActivityManagerService(简称AMS),或者WindowManagerService(WMS) 怎么实现的啊,有些什么细节需要注意啊,View被加入到ViewRoot的流程啊等等。每每看到这些文章,教人怎么准备安卓framework面试,我都觉得很痛心。。。

因为在我看来,对于应用开发来说,面试考这些纯粹就是扯淡,很有可能面试官自己也只是在网上看看文章,然后照本宣科的再去问面试者。这种现象其实说白了就是卷。因为面试的内容已经在app层挖掘完了,再想提高面试门槛就只能往深了挖。

安卓的系统framework的代码就成了最好的替罪羔羊,因为framework的内容足够多。多到什么程度呢,你下载一套新的AOSP代码可能都要一个小时,全量编译就更不用说了,我自己每次开新的Repo都非常开心,因为我可以心安理得的边看视频边等代码下载了。所以在代码量如此庞大的情况下,面试官想出什么问题都可以,只要你面试者有时间,我总可以问倒你。

但是这些代码都是好代码么?或者说安卓framework里面的所有代码都值得面试者学习么?

答案是NO。这也是一个非常明显的答案。

安卓的framework经过快十二年的迭代,很多地方其实是又臭又长。比如臭名昭著的View class:

https://android.googlesource.com/platform/frameworks/base/+/a175a5b/core/java/android/view/View.java#15354

已经演变成一个一万五千行的类了。。。。。

很多地方不是不想优化,而是没人敢动,搞出问题了咋办,你负责?

一不小心扯远了。。。回到面试的问题。

那么对于有些面试官考到的八股文。那些考点,或者考点指向的代码同样也不是圣经。他们很有可能只是谷歌的安卓团队在当初定义的一些规则而已,在谷歌里面做安卓framework,或者说有权限能改安卓framework代码的人数不胜数,难道每个人都是天才,可以一点错误都不犯?显然不可能。

那难道看framework源码就一文不值了?那也肯定不是,前提是我们在看源代码的时候能够做到取其精华去其糟粕。

有的读者肯定会说我站着说话不腰疼,话都可以说的好听,具体怎么操作,我怎么知道什么是精华什么是糟粕?

在说具体怎么操作之前,我想先举个反例。

源码分析?

很多初学者一上来就雄心壮志,觉得要全面学习安卓系统,起头就开始读源码,或者看源码分析:

这样做的后果往往就是在起跑线就被劝退了。原因很简单,当你连framework某个类具体是干什么都不知道的情况下,就去读源代码,你是不会有动力的。这和很多学生刚刚毕业,代码还没写多少行就想开始看开源项目,学习源代码一样,基本上可以说没有意义。

很多尝试阅读安卓源代码的朋友,甚至连刷写设备都没试过,这怎么可能可以学到framework的精华呢。说白了,想不动手操作就学习源码,也是一种偷懒的行为,以为自己学习很努力,其实都在做无用功。

刷机!

学习源码的第一步,其实是刷设备。跟着官方教程,从第一步下载AOSP源代码开始:

1、https://source.android.com/setup/develop

再到用AOSP源代码build操作系统:

2、 https://source.android.com/setup/build

最后把build好的系统image刷到手机上:

3、https://source.android.com/setup/build/running

学代码?先修bug

最后,就是动手操作了。

落实到具体的操作就是,修bug!!!

没错,学习任何庞大的框架,一个人都没办法从面到点的学习,都是从点到面,从下到上。因为你不可能一开始就对全局都有认识。

所以修bug就成了一个最好的切入点。安卓的AOSP有数不尽的bug,每天都会有一大堆进入到bug tracker里面。Framework的bug tracker:

https://issuetracker.google.com/issues?q=componentid:192705+

大到系统fatal error,小到注释没加,都在里面。大家不要觉得参与进去很难,我随手一看,就找到一个简直不能再弱智的bug:

https://issuetracker.google.com/issues/196574813

同样的,这个解决它的code review,就一行改动:

https://android-review.googlesource.com/c/platform/frameworks/base/+/1799607

是不是顿时觉得自己也能参与到安卓的开源行动里面了?

只要有毅力,哪怕是自己解决不了,你都可以跟踪一个你感兴趣的bug,看看别人是怎么解决的,看看别人是怎么复现这个bug的,对自己也是有很大帮助的。至少,这样的方式会比自己苦读源码要强。源码分析不是不可以看,而是要用对的方式去看,比如把源码分析的博文当成一个字典,有遇到相关的bug的时候翻一番。

最后

最后的最后!我也不是说让大家以后面试都不准备了,而是提供另外一个平时可以学习的思路,两手抓难道不是更稳 :)

正所谓知其然知其所以然,底层的实现庞大而又复杂,完全不用心去读源码很难将知识点深入理解。

这里给大家推荐一套学习路线,并附有相关《Android Framework核心知识笔记》,相信可以给大家提供一些帮助,有需要的朋友们也可以下载下来随时查漏补缺。

如果需要这份《Android Framework核心知识笔记》,可以顺手帮我点赞评论一下,有需要的朋友可以直接前往公号:Android开发之家免费领取

Handler

  • 宏观理论分析与Message源码分析
  • MessageQueue的源码分析
  • Looper的源码分析
  • handler的源码分析
  • ……

Binder

  • 学习Binder前必须要了解的知识点
  • ServiceManager中的Binder机制
  • 系统服务的注册过程
  • ServiceManager的启动过程
  • 系统服务的获取过程
  • Java Binder的初始化
  • Java Binder中系统服务的注册过程
  • ……

Zygote

  • Android系统的启动过程及Zygote的启动过程
  • 应用进程的启动过程
  • ……

如果需要这份《Android Framework核心知识笔记》,可以顺手帮我点赞评论一下,有需要的朋友可以直接前往公号:Android开发之家免费领取

AMS

  • Activity生命周期管理
  • onActivityResult执行过程
  • AMS中Activity栈管理详解
  • ……

PMS

  • PMS的启动过程和执行流程
  • APK的安装和卸载源码分析
  • PMS中intent-filter的匹配架构
  • ……

WMS

  • WMS的诞生
  • WMS的重要成员和Window的添加过程
  • Window的删除过程
  • ……

如果需要这份《Android Framework核心知识笔记》,可以顺手帮我点赞评论一下,有需要的朋友可以直接前往公号:Android开发之家免费领取

如果需要这份《Android Framework核心知识笔记》,可以顺手帮我点赞评论一下,有需要的朋友可以直接前往公号:Android开发之家免费领取

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容