Android Architecture(1)

OS-level Architecture

Denis Hsieh
Denis Brain
Oct 11, 2022

--

https://developer.android.com/guide/platform

俗話說的好(?),厲害的車手,不只開車技術強,更懂得車子本身,甚至還會改車;所以身為一個 Android developer,當然也需要了解 Android 這部「車子」。

我想 Android 開發人員的最大福音,大概就是 Android OS 是個開源的單晶片系統的典範,相較於 iOS 是閉源系統,開發人員可以更容易了解 Android 的底層運作姿勢,更有機會往下摸,我是說可能有機會成為 BSP engineer 啦(如果有興趣的話),不過 BSP 領域跟 App 領域,就是兩個不同的領域(除了 App 以外的部分,全部都歸 BSP 管XD)。

分享技術大牛 Gityuan 的文章「掌握 Android 系統架構,看這篇就夠了!」,對~是簡體沒錯,從開機啟動開始講述(Boot Loader -> Kernel -> Native -> Framework -> App)整個錯綜複雜的 Android 系統概觀,非常值得一看!

以下紀錄個人特別有共鳴之處:

通訊方式 — 3.3 Handler 消息機制(MessageQueue、Message、Looper、Handler)

  • Process 👉🏼 進程/程序/行程
  • Thread 👉🏼 線程/執行緒

Binder/Socket: both 進程間/線程間通訊,可用於兩個具有獨立記憶體空間的進程間通訊 or 共享記憶體空間的兩個線程間通訊。

Handler: only 同進程的線程間通訊,其核心是線程間的共享記憶體空間,而不同進程擁有不同的記憶體空間,也就不能用 Handler 來實現進程間通訊。

  • 通常的做法是,工作線程完成相對應的工作後,發送訊息告知主線程更新 UI,其實也可以 👉🏼 UI 線程向工作線程發送消息 or 多個工作線程之間通過 Handler 發送消息

結束語

  • 「只有真正閱讀並理解系統核心架構的設計,解決問題和設計方案才能做到心中無劍勝有劍,才能做到知其然知其所以然。當修煉到此,恭喜你對系統有了更高一個層次的理解,正如太極劍法,忘記了所有招式,也就練成了太極劍法。」
  • 「再回頭過去看看那些 API,看到的將不再是一行行代碼、一個個接口的調用,而是各種訊息的傳遞與交互工作,而是背後成千上萬個小蝌蚪的動態執行流。」
  • 「一言以蔽之,程序代碼是死的,系統運轉是活的,要以動態視角去理解系統架構。」

是不是意猶未盡,接下來我會持續往「Android 系統架構」的方向去研究,若有不錯的文章或更深的理解,也會更新上來!

Last updated Oct 11 2022

--

--

Denis Hsieh
Denis Brain

人生就是在絢爛與平靜中,不斷循環的過程。