這一部分是 Android 系統從按下電源鍵開始,而後到展現開機界面,再到展現桌面以前的一個過程。瞭解下面相關進程的工做流程,會對 Android 系統有一個總體的概念,是一個從 0 到 1 的過程,對深刻研究 Android 系統內部機制有很大幫助。git
init 進程github
瞭解 init 進程建立與啓動的流程。算法
Zygote 進程設計模式
瞭解 Zygote 進程建立的流程,以及 fork 的過程。網絡
system_server 進程架構
瞭解 system_server 進程啓動流程,工做流程。ide
ServiceManager組件化
瞭解 ServiceManager 的啓動流程,以及 ServiceManager 在系統中的做用。學習
這一部分是計算機操做系統相關的原理,也是計算機相關專業的一門必修課程,推薦學習下相關知識。職業規劃
Binder
Binder 是 Android 系統中特有的一種 IPC 通訊方式,建議閱讀 Binder 相關的源碼,與深刻越好,理解 Binder 工做的原理,瞭解服務的註冊、獲取、死亡通知的流程。
Handler
Handler 是 Android 系統中線程間通訊的方式,已經在 Android 高級工程師部分說過了。這裏必定要閱讀下源碼瞭解內部的運行機制。
Socket
Socket 是系統中常見的一種 IPC 通訊方式,Socket 的應用範圍很廣,在進程間通訊、網絡通訊都會用到,建議深刻了解下。
Pipe
Pipe(管道)是 Linux 系統中常見的一種 IPC 通訊方式,建議深刻了解下工做原理。
signal
signal(信號量)是系統中常見的一種 IPC 通訊方式,建議深刻了解下工做原理。
Activity、Service、Broadcast、ContentProvider
瞭解四大組件啓動流程,理解生命週期回調過程,瞭解工做原理。
ActivityManagerService(AMS)
理解 ActivityManagerService 工做流程,以及與 Activity 工做的流程。
WindowManagerService(WMS)
理解 WindowManagerService 工做流程,以及與 ActivityManagerService 和 Activity 工做的過程。
View、Window、Surface
理解 Activity、Window、View 之間的關係,瞭解 View 渲染機制。
Surface、SurfaceFlinger
理解 View 與 Surface 之間的關係,瞭解 SurfaceFlinger 工做流程,理解 View 渲染的過程。
PackageManagerService(PKMS)
理解 PackageManagerService 工做流程,瞭解 Apk 安裝與卸載過程。
PowerManagerService(PMS)
理解 PackageManagerService 工做流程,瞭解屏幕喚醒、滅屏的過程,並理解 WeakLock 機制。
InputManagerService(IMS)
理解 InputManagerService 工做流程,理解事件的建立流程、事件分發機制,ANR 觸發原理。
AudioFlinger
理解 AudioFlinger 工做流程。
AssertManager
理解 Apk 安裝包中資源管理的過程。
能夠從源碼的角度分析異常產生的緣由,定位異常,以及處理。
內存模型
瞭解 JVM 內存模型,包括堆、棧、方法區、運行時常量池等。
類加載機制
瞭解類加載時機,類加載的過程,理解類加載器雙親委派模型。
垃圾回收機制
瞭解垃圾回收的緣由,理解對象生命週期,瞭解垃圾回收算法。
Android Gradle Plugin
經過閱讀 Android Gradle Plugin 源碼,理解 Gradle 構建項目的過程,瞭解插件開發過程。
VirtualAPK、Tinker
經過閱讀 VirtualAPK 源碼,理解熱修復、插件化的原理。
以上就是 Android 資深(專家)工程師
的基本知識點,若是在高級工程師部分基礎很牢,進階到資深(專家)是很容易的。這個級別的知識點不只僅須要對 API 熟練應用,更重要的是對內部的運行機制的深刻理解。
咱們能夠發現不少的知識點都是對 Android 系統源碼的閱讀來獲取的,閱讀源碼是一個很痛苦的過程,也是必須經歷的一個過程。
在閱讀源碼的時候建議多注重對總體流程的把握,而不是深刻細節不能自拔。畢竟咱們主要工做仍是開發 App,閱讀源碼是爲了更好的理解內部運行機制。
專家除了具備紮實的技術深度之外,還有必定的技術廣度,以及不錯的架構設計能力。除了技術,軟技能也是很重要的部分。好比如何管理團隊,帶帶新人,寫寫 PPT,吹 NB 啥的。
已經達到了資深(專家)的開發者,之後的學習路線跟本身的職業規劃有很大關係。這個級別技術也再也不那麼重要,畢竟都是專家了,你們都很 NB,怎麼還能讓人手把手教呢?!
如下方面你們能夠參考下:
通常達到資深(專家)的開發者須要 3 - 5 年左右,本科畢業的學生年齡通常在 22 週歲左右,那麼達到資深(專家)最快也得 25 週歲了。這裏咱們會遇到一個職業上的危機 —— 30 歲危機。
隨着年齡的愈來愈大是繼續作技術?仍是轉型作管理呢?Android 也沒啥可研究的了,仍是換其餘領域呢?這是一個值得思考的問題,我尚未這個經歷(歲數還沒到)不敢妄下定論,哈哈。
這裏分享下網上的一份關於各大廠 Android 級別的薪資參考圖(若有侵權,請聯繫我刪除)。
我看到網上不少消息都說今年互聯網寒冬什麼什麼的,其實每一年都會說寒冬。互聯網總共也就發展了十幾年,從 2000 年初的諾基亞到如今的智能手機時代,也就十幾年的時間。誰有會預料的下一個十年以後會是什麼樣的呢?
因爲前幾年大量培訓出來的開發者(這裏只是說下客觀事實,沒有貶低的意思),整個市場涌入大量的初級、中級開發者,因此對於新人來講的確很差找工做了,由於競爭的人多了。
本身沒能力就說沒能力,怎麼你到哪兒,哪都大環境很差,你是破壞大環境的人啊?—— 趙本山
做爲開發者咱們最好的準備就是知識的儲備,若是咱們努力學習達到了高級甚至更高,目前需求量仍是很大的。目前我瞭解到的 Android 領域專家級別的工程師也沒有多少,你們能夠留意統計一下。
關於 Android 進階的學習指南就已經完結了,歡迎你們繼續關注,其餘方面的技術分享,及我的感悟。
歡迎你「掃一掃」下面的二維碼,關注個人公衆號,能夠接受最新的文章推送,有豐厚的抽獎活動和福利等着你哦!😍
若是你有什麼疑問或者問題,能夠 點擊這裏 提交 issue,也能夠發郵件給我 jeanboy@foxmail.com。
來一塊兒交流學習,羣裏有不少大牛和學習資料,相信必定能幫助到你!