深入理解Android

hzbook2008發表於2011-09-01
深入理解Android
《深入理解Android:卷I》前言

雖然前言位於書的最前面,但往往是最後才完成的。至今,《深入理解Android:卷I》的撰寫工作算是基本完成了,在書稿付梓之前,心中卻有些許忐忑和不安,因為拙著可能會存在Bug。為此,我先為書中可能存在的Bug將給大家帶來的麻煩致以 真誠的歉意。另外,如果大家發現本書存在紕漏或有必要進一步探討的地方,請發郵件給我(fanping.deng#gmail.com,請將#改為@), 我會盡快回復。非常樂意與大家交流。

本書主要內容

全書一共10章,其中一些重要章節中還設定了“擴充思考”部分。這10章的主要內容是:

第1章介紹了閱讀本書所需要做的一些準備工作,包括對Android整個系統架構的認識,以及Android開發環境和原始碼閱讀環境的搭建等。注意,本書分析的原始碼是Android2.2。

第2章透過Android原始碼中的一處例項深入地介紹了JNI技術。

第3章圍繞init程式,介紹瞭如何解析init.rc以啟動Zygote和屬**(property service)的工作原理。

第4章剖析了zygote和system_server程式的工作原理。本章的擴充思考部分討論了Andorid的啟動速度、虛擬機器heapsize的大小調整問題以及“看門狗”的工作原理。

第5章講解了Android原始碼中常用的類,如sp、wp、RefBase、Thread類、同步類、Java中的Handler類以及Looper類。這些類都是Android中最常用和最基本的,只有掌握這些類的知識,才能在分析後續的程式碼時遊刃有餘。

第6章以MediaServer為切入點,對Binder進行了較為全面的分析。本章 擴充思考部分討論了與Binder有關的三個問題,它們分別是Binder和執行緒的關係、死亡通知以及匿名Service。筆者希望,透過本章的學習,大 家能更深入地認識Binder的本質。

第7章闡述了Audio系統中的三位重要成員AudioTrack、AudioFlinger和AudioPolicyService的工作原理。本章擴充思考部分分析了AudioFlinger中 DuplicatingThread的工作原理,並且和讀者一道探討了單元測試、ALSA、Desktop check等問題。透過對本章的學習,相信讀者會對Audio系統有更深的理解。

第8章以Surface系統為主,分析了Activity和Surface的關係、 Surface和SurfaceFlinger的關係以及SurfaceFlinger的工作原理。本章的擴充思考部分分析了Surface系統中資料傳輸控制物件的工作原理、有關ViewRoot的一些疑問,最後講解了LayerBuffer的工作流程。這是全書中難度較大的一章,建議大家反覆閱讀和思 考,這樣才能進一步深入理解Surface系統。

第9章分析了Vold和Rild,其中Vold負責Android平臺中外部儲存裝置的管理,而Rild負責與射頻通訊有關的工作。本章的擴充思考部分介紹了嵌入式系統中與儲存有關的知識,還探討了Rild和Phone設計最佳化方面的問題。

第10章分析了多媒體系統中MediaScanner的工作原理。在本章的擴充思考部分,筆者提出了幾個問題,旨在激發讀者深入思考和學習Android的慾望。

本書特色

筆者認為,本書最大的特點在於,較全面、系統、深入地講解了Android系統中的幾 大重要組成部分的工作原理,旨在透過直接剖析原始碼的方式,引領讀者一步步深入於諸如Binder、Zygote、Audio、Surface、 Vold、Rild等模組的內部,去理解它們是如何實現的,以及如何工作的。筆者根據研究Android程式碼的心得,在本書中嘗試性地採用了精簡流程、逐 個擊破的方法進行講解,希望這樣做能幫助讀者更快、更準確地把握各模組的工作流程及其本質。本書大部分章節中都專門撰寫了“擴充思路”的內容,希望這部分內容能激發讀者對Android程式碼進行深入研究的熱情。

本書面向的讀者

(1)Android應用開發工程師

對於Android應用開發工程師而言,本書中關於Binder,以及sp、wp、Handler和Looper等常用類的分析或許能幫助你迅速適應Android平臺上的開發工作。

(2)Android系統開發工程師

Android系統開發工程師常常需要深入理解系統的運轉過程,而本書所涉及的內容可能正是他們在工作和學習中最想了解的。那些對具體模組(如Audio系統和Surface系統)感興趣的讀者也可以直接閱讀相關章節的內容。

這裡有必要提醒一下,要閱讀此書,應具有C++的基本知識,因為本書的大部分內容都集中在了Native層。

如何閱讀本書

本書是在分析Android原始碼的基礎上展開的,而原始碼檔案所在的路徑一般都很長,例 如,檔案AndroidRuntime.cpp的真實路徑就是framework/base/core/jni/AndroidRuntime.cpp。 為了書寫方便起見,我們在各章節開頭把該章所涉及的原始碼路徑全部都列出來了,而在具體分析原始碼時,則只列出該原始碼的檔名。

下面就是一個示例:

[--&gtAndroidRuntime.cpp]

//這裡是原始碼分析和一些註釋。

如有一些需要特別說明的地方,則會用下面的格式表示:

[--&gtAndroidRuntime.cpp::特別說明]

特別說明可幫助讀者找到原始碼中的對應位置。

另外,本書在描述類之間的關係以及在函式呼叫流程上使用了UML的靜態類圖以及序列圖。UML是一個強大的工具,但它的建模規範過於煩瑣,為更簡單清晰地描述事情的本質,本書並未完全遵循UML的建模規範。這裡僅舉一例,如圖1所示。

深入理解Android

圖1:UML示例圖

本書所使用的UML圖都比較簡單,讀者大可不必花費時間專門學習UML。

本書的編寫順序,其實應該是6、5、4、7、8、9、10、2、3、1章,但出於邏輯連貫性的考慮,還是建議讀者按本書的順序閱讀。其中,第2、5、6章分別講述了JNI、Android常用類以及Binder系統,這些都是基礎知識,我們有必要完全掌握。其他部分的內容都是針對單個模組的,例如Zygote、Audio、Surface、MediaScanner等,讀者可各取所需,分別對其進行研究。

----------------------------------

作者簡介:鄧凡平,資深Android開發工程師,熱衷於Android原始碼的研 究,對Android的架構設計和實現原理有非常深刻的認識和理解,應用開發經驗也十分豐富。目前就職於國內一家領先的Android企業,負責 Framework的開發和維護。樂於分享,活躍於CSDN等專業社群,撰寫的Android Framework原始碼的系列文章深受讀者歡迎。此外,他對Linux核心、C/C++/Python相關的技術,以及高效能網路伺服器和多核並行開發等 也有一定的研究。

欲瞭解《深入理解Android:卷I》更多內容,可訪問互動網該書頁面,謝謝大家!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16502878/viewspace-706449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章