深入理解Android
雖然前言位於書的最前面,但往往是最後才完成的。至今,《深入理解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。
為了書寫方便起見,我們在各章節開頭把該章所涉及的原始碼路徑全部都列出來了,而在具體分析原始碼時,則只列出該原始碼的檔名。
下面就是一個示例:
[-->AndroidRuntime.cpp]
//這裡是原始碼分析和一些註釋。
如有一些需要特別說明的地方,則會用下面的格式表示:
[-->AndroidRuntime.cpp::特別說明]
特別說明可幫助讀者找到原始碼中的對應位置。
另外,本書在描述類之間的關係以及在函式呼叫流程上使用了UML的靜態類圖以及序列圖。UML是一個強大的工具,但它的建模規範過於煩瑣,為更簡單清晰地描述事情的本質,本書並未完全遵循UML的建模規範。這裡僅舉一例,如圖1所示。
圖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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 深入理解 Notification 機制Android
- 深入理解 Android 中的 MatrixAndroid
- [深入理解Android卷二 全文-第五章]深入理解PowerManagerServiceAndroid
- [深入理解Android卷二 全文-第六章]深入理解ActivityManagerServiceAndroid
- [深入理解Android卷二 全文-第四章]深入理解PackageManagerServiceAndroidPackage
- [深入理解Android卷二 全文-第三章]深入理解SystemServerAndroidServer
- [深入理解Android卷一全文-第十章]深入理解MediaScannerAndroid
- 深入理解Android逆向除錯原理Android除錯
- 深入理解Android中的SharedPreferencesAndroid
- 深入理解Android訊息機制Android
- 深入理解Android中的ClassLoaderAndroid
- [深入理解Android卷一全文-第八章]深入理解Surface系統Android
- [深入理解Android卷一全文-第七章]深入理解Audio系統Android
- 深入理解Android 之 Activity啟動流程(Android 10)Android
- Android 深入理解Android中的自定義屬性Android
- 深入理解 Android 訊息機制原理Android
- [深入理解Android卷二 全文-第二章]深入理解Java Binder和MessageQueueAndroidJava
- [深入理解Android卷一全文-第九章]深入理解Vold和RildAndroid
- 深入理解 Android 中的各種 ContextAndroidContext
- 深入理解 Android 之 View 的繪製流程AndroidView
- Android 進階17:Fragment FragmentManager FragmentTransaction 深入理解AndroidFragment
- 深入理解Android NDK日誌符號化Android符號
- Android中深入理解 LayoutInflater.inflate()Android
- 深入理解 Android Instant Run 執行機制Android
- Android之深入理解xml資料的pull解析AndroidXML
- 深入理解Android訊息佇列原理篇Android佇列
- Android EventBus原始碼解析 帶你深入理解EventBusAndroid原始碼
- 深入理解 Android 動畫 Interpolator 類的使用Android動畫
- Android 自定義View:深入理解自定義屬性(七)AndroidView
- 圖解 Android 系列(二)深入理解 init 與 zygote 程式圖解AndroidGo
- 帶你深入理解Android中的自定義屬性!!!Android
- 深入理解Android非同步訊息處理機制Android非同步
- 深入理解Isolate
- 深入理解HashMapHashMap
- 深入理解TransformORM
- 深入理解KVO
- 深入理解 JVMJVM
- 深入理解 GitGit