首頁/ 汽車/ 正文

Framework到底該怎麼學習?

作者:qing的世界

相信大家在找工作的時候,肯定或多或少都被面試官問到過安卓的八股文。比如

ActivityManagerService

(簡稱AMS),或者

WindowManagerService

(WMS) 怎麼實現的啊,有些什麼細節需要注意啊,View被加入到ViewRoot的流程啊等等。每每看到這些文章,教人怎麼準備安卓framework面試,我都覺得很痛心。。。

Framework到底該怎麼學習?

因為在我看來,對於應用開發來說,面試考這些純粹就是扯淡,很有可能面試官自己也只是在網上看看文章,然後照本宣科的再去問面試者。這種現象其實說白了就是卷。因為面試的內容已經在app層挖掘完了,再想提高面試門檻就只能往深了挖。

Framework到底該怎麼學習?

安卓的系統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到底該怎麼學習?

這樣做的後果往往就是在起跑線就被勸退了。原因很簡單,當你連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

Framework到底該怎麼學習?

是不是頓時覺得自己也能參與到安卓的開源行動裡面了?

只要有毅力,哪怕是自己解決不了,你都可以跟蹤一個你感興趣的bug,看看別人是怎麼解決的,看看別人是怎麼復現這個bug的,對自己也是有很大幫助的。至少,這樣的方式會比自己苦讀原始碼要強。原始碼分析不是不可以看,而是要用對的方式去看,比如把原始碼分析的博文當成一個字典,有遇到相關的bug的時候翻一番。

最後

最後的最後!我也不是說讓大家以後面試都不準備了,而是提供另外一個平時可以學習的思路,兩手抓難道不是更穩 :)

正所謂知其然知其所以然,底層的實現龐大而又複雜,完全不用心去讀原始碼很難將知識點深入理解。

這裡給大家推薦一套學習路線,並附有相關《Android Framework核心知識筆記》,相信可以給大家提供一些幫助,有需要的朋友們也可以下載下來隨時查漏補缺。

如果需要這份《Android Framework核心知識筆記》,

可以順手幫我點贊評論一下,直接

私信我【FWK】即可免費領取!

Handler

宏觀理論分析與Message原始碼分析

MessageQueue的原始碼分析

Looper的原始碼分析

handler的原始碼分析

……

Framework到底該怎麼學習?

Binder

學習Binder前必須要了解的知識點

ServiceManager中的Binder機制

系統服務的註冊過程

ServiceManager的啟動過程

系統服務的獲取過程

Java Binder的初始化

Java Binder中系統服務的註冊過程

……

Framework到底該怎麼學習?

Zygote

Android系統的啟動過程及Zygote的啟動過程

應用程序的啟動過程

……

Framework到底該怎麼學習?

如果需要這份《Android Framework核心知識筆記》,

可以順手幫我點贊評論一下,直接

私信我【FWK】即可免費領取!

AMS

Activity生命週期管理

onActivityResult執行過程

AMS中Activity棧管理詳解

……

Framework到底該怎麼學習?

PMS

PMS的啟動過程和執行流程

APK的安裝和解除安裝原始碼分析

PMS中intent-filter的匹配架構

……

Framework到底該怎麼學習?

WMS

WMS的誕生

WMS的重要成員和Window的新增過程

Window的刪除過程

……

Framework到底該怎麼學習?

如果需要這份《Android Framework核心知識筆記》,

可以順手幫我點贊評論一下,直接

私信我【FWK】即可免費領取!

Framework到底該怎麼學習?

如果需要這份《Android Framework核心知識筆記》,

可以順手幫我點贊評論一下,直接

私信我【FWK】即可免費領取!

相關文章

頂部