Android的設計與實現:卷I ( 簡體 字) |
作者:楊云君 著 | 類別:1. -> 程式設計 -> 手機程式 -> Android |
譯者: |
出版社:機械工業出版社 | 3dWoo書號: 35567 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:5/1/2013 |
頁數:414 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787111417132 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:為什么要寫本書
Android從2007年問世至今,不僅在各個應用領域發展得如火如荼,其圖書市場也是一片“興旺”,各個層次、各種類型的Android圖書的需求都比較旺盛。目前市場上已經有的圖書主要分為以下三類:
針對Android SDK API使用的描述
針對Android系統架構各部分的描述
針對Kernel移植的描述
其中鮮有針對Android 四層架構中某一層進行深入挖掘的圖書,這讓讀者有一種只能窺其全貌,卻不能獨得一隅的遺憾。
框架層是整個Android系統的靈魂,這一層起著承上啟下的作用,是理解整個Android的關鍵,也是解決Android應用層Bug的關鍵。要開發一款精品手機,就必須深入理解這一層。
國際知名的手機廠商對手機品質有著近乎苛刻的要求,手機必須在嚴格的測試環境下運行數百小時無問題方可上市銷售。這期間出現的穩定性(ANR、Crash、Watchdog)、內存(OOM)、性能等問題都讓人十分頭痛。這些問題主要來自于應用程序、Framework、Dalvik虛擬機、Linux Kernel、Driver以及Modem,其中相當大一部分問題源自對Framework的錯誤理解和使用。舉例如下:
解決KeyDispatchTimeout類型的ANR,需要熟悉Activity Manager、Input消息處理系統的機制。
解決應用程序IDLE狀態時發生的ANR,需要熟悉Activity Manager、Binder的運行機制。
解決框架層的Watchdog問題,需要熟悉Android啟動階段開啟的系統服務和Watchdog的運行機制。
解決應用程序的性能問題,同樣需要理解框架層的運行和調度機制。
上述問題只是冰山一角,僅僅停留在使用SDK API的層次是不可能解決上述問題的。因此,非常需要一本能深入挖掘框架層的專著。
針對以上問題,編寫“Android的設計與實現”系列叢書,對Android核心模塊和主要問題進行深入分析。其中卷I的主題是啟動和通信,主要分析Android運行環境、Package Manager、Activity Manager、Binder和消息機制等核心模塊。卷Ⅱ的主題是資源和UI,主要分析Content Provider、Resource、View System、Window Manager、SurfaceFlinger等核心模塊。
讀者對象
本書主要分析了Android框架層主要部分的體系結構和實現原理,讓讀者對Framework有一個清晰的理解,并以此增強解決實際開發中遇到的Bug的能力。
本書適合以下幾類讀者:
中高級Android應用開發者
Android系統開發者
Android系統架構師
負責Android調試與優化的工作者
如何閱讀本書
本書分為六大部分:
第一部分為基礎篇(第1∼2章),簡要分析Android的體系結構、開發和調試環境、框架基礎。
第二部分為啟動篇(第3∼4章),著重分析Android啟動過程的機制和實現,讓讀者對框架層系統服務的運行基礎有一個全面的理解。
第三部分為Binder篇(第5∼6章),著重分析Binder在Native框架層和Java框架層的機制和實現,讓讀者掌握進程間通信模型。
第四部分為消息通信篇(第7章),著重分析Android的消息驅動和異步處理機制,幫助讀者掌握線程間通信模型。
第五部分為Package Manager篇(第8∼9章),著重分析Android應用程序的解析和安裝流程。
第六部分為Activity Manager篇(第10∼12章),著重分析Activity Manager Service的運行機制、應用程序和進程的啟動流程、進程管理機制。
此外,本書在分析類的層次結構和方法的調用流程上,分別使用了UML的類圖和序列圖。為了不增加讀者的閱讀負擔,本書只使用了UML中比較簡單的圖形。
類圖如圖1所示。
圖1 類圖
圖中展示了內部類和外部類的關系、接口和實現類的關系、父類和子類的關系、注釋的表示法、類的關聯關系和依賴關系。
為了簡單鮮明,本書在繪制類圖時,會省略部分類圖中的方法參數和返回值,讀者可參照源碼查看方法的具體返回值和參數。
序列圖如圖2所示。
圖2 序列圖
圖中表示A調用了B的b方法,在b方法中又調用了B的b1方法,這兩次調用都是同步調用,用實心箭頭表示;A調用C的c方法,這次調用是異步調用,用箭頭表示。
勘誤和支持
由于作者的水平有限,加之編寫時間倉促,書中難免會出現一些錯誤或者不準確的地方,懇請讀者批評指正。如果你有寶貴意見,歡迎通過以下聯系方式與筆者討論,期待能夠得到你們的真摯反饋。
郵箱:yangyunjun@gmail.com
博客:blog.csdn.net/allongriver
致謝
感謝本書的策劃編輯楊福川,他不僅對本書的寫作思路提出了寶貴意見,而且在寫作過程中一直鼓勵和引導我順利完成全部書稿。
感謝編輯白宇,她不僅將我的初稿修訂成格式工整的書稿,還對篇章的布局提出了很好的思路。
感謝親朋好友的無私幫助和大力支持。
感謝花費時間和精力閱讀本書的讀者朋友,你們的批評和指正是我進步的動力。
楊云君
2013年1月于北京 |
內容簡介:本書是Android應用開發工程師和Android系統工程師進階修煉的必讀之作。它由資深Android內核專家親自執筆,從源代碼角度,系統、深入、透徹剖析Android系統框架層(Framework)的設計思想和實現原理,為Android應用工程師和系統工程師解決實際工作中的各種難題提供了原理性的指導。為了降低讀者的閱讀成本,本書使用了大量簡單的UML類圖和序列圖來展示類的層次結構和方法的調用流程,使讀者能迅速讀完本書并領會其精髓!
“Android的設計與實現”系列叢書主要圍繞Android系統的四層結構展開,通過源代碼來分析各層的設計思想與實現原理,卷I則主要是針對Framework(框架層)的。全書共12章,分為六個部分:基礎篇(第1∼2章)詳細講解了Android的體系結構、源代碼閱讀和調試環境的搭建,以及整個框架的基礎;啟動篇(第3∼4章)深入分析了Android啟動過程的機制和實現原理,能幫助讀者全面理解框架層系統服務的運行基礎;Binder篇(第5∼6章)著重分析了Binder在Native框架層和Java框架層的機制和實現,能讓讀者深入理解進程間的通信模型;消息通信篇(第7章)重點分析了Android的消息驅動和異步處理機制,能讓讀者深入理解線程間的通信模型;Package Manager篇(第8∼9章)主要講解了Package Manager的機制與實現,以及APK的安裝方法與過程;Activity Manager篇(第10∼12章)深入闡述了ActivityManagerService的運行機制、應用程序和進程的啟動流程,以及進程管理機制。
本書適合中高級的Android應用開發工程師、Android系統開發工程師、Android系統架構師,以及負責對Android系統進行調試和優化的工程師們閱讀。 |
目錄:前言
第一部分 基礎篇
第1章 Android體系結構及源代碼閱讀環境搭建 / 2
1.1 Android發展過程 / 2
1.2 Android體系結構 / 3
1.2.1 靜態視角的體系結構 / 3
1.2.2 動態視角的體系結構 / 7
1.3 Android源碼下載和編譯 / 8
1.3.1 搭建開發環境 / 8
1.3.2 下載Android上層系統源代碼 / 9
1.3.3 下載指定模塊源碼 / 10
1.3.4 下載 Android Linux Kernel源碼 / 11
1.3.5 編譯Android上層系統源碼 / 12
1.3.6 編譯指定模塊源碼 / 12
1.4 Android源碼結構 / 14
1.5 Android源碼開發工具的配置和使用 / 15
1.5.1 配置Android SDK / 15
1.5.2 用Eclipse開發和調試源代碼 / 16
1.5.3 用Source Insight閱讀源代碼 / 19
1.6 NDK開發環境配置 / 20
1.7 本章小結 / 21
第2章 框架基礎JNI / 22
2.1 JNI在Android系統中所處的位置 / 22
2.2 JNI框架層實例分析 / 23
2.2.1 Log系統Java層分析 / 24
2.2.2 Log系統的JNI層 / 24
2.2.3 Log系統的JNI方法注冊 / 25
2.3 JNI總管:JNIEnv / 27
2.4 在Java中調用JNI實現方法 / 29
2.4.1 Java數據類型與JNI數據類型轉換 / 29
2.4.2 JNI方法命名規則 / 30
2.4.3 JNI方法簽名規則 / 31
2.5 JNI操作Java對象 / 32
2.5.1 訪問Java對象 / 32
2.5.2 操作成員變量(域)和方法 / 33
2.5.3 全局引用、弱全局引用和局部引用 / 34
2.6 JNI異常處理 / 36
2.7 JNI應用層實例分析 / 38
2.7.1 Java層分析 / 38
2.7.2 JNI層代碼和異常處理 / 39
2.8 本章小結 / 42
第二部分 啟動篇
第3章 Android啟動過程的底層實現 / 44
3.1 Android正常模式啟動流程 / 44
3.2 Kernel啟動過程 / 44
3.2.1 內核引導階段 / 45
3.2.2 內核啟動階段 / 46
3.3 init進程的執行過程 / 49
3.4 init.rc文件解析過程 / 53
3.4.1 Android初始化語言 / 53
3.4.2 init.rc的內容 / 56
3.4.3 解析配置文件 / 57
3.4.4 解析Service / 60
3.4.5 解析Action / 63
3.5 觸發并啟動Action和Service / 65
3.5.1 觸發Action / 65
3.5.2 執行Action / 66
3.5.3 啟動Service / 70
3.5.4 init對屬性服務的處理 / 71
3.6 init循環監聽處理事件 / 75
3.7 本章小結 / 77
第4章 Android 啟動過程的上層實現 / 78
4.1 第一個Dalvik虛擬機zygote / 79
4.1.1 zygote的配置 / 79
4.1.2 如何執行zygote服務程序 / 80
4.2 ZygoteInit的啟動過程 / 82
4.2.1 創建Dalvik虛擬機 / 83
4.2.2 注冊JNI方法 / 85
4.2.3 開啟Java世界 / 88
4.3 ZygoteInit開啟Java世界的五部分工作 / 89
4.3.1 注冊zygote的Socket / 89
4.3.2 預加載Class資源和Resource資源 / 89
4.3.3 啟動system_server進程 / 92
4.3.4 執行MethodAndArgsCaller的run方法 / 98
4.3.5 執行runSelectLoopMode方法 / 102
4.4 zygote處理Home啟動請求 / 104
4.5 本章小結 / 112
第三部分 Binder篇
第5章 Binder在Native框架層的實現 / 114
5.1 Binder與C/S體系結構概述 / 114
5.2 servicemanager進程的啟動過程 / 115
5.2.1 初始化Binder通信環境 / 116
5.2.2 注冊上下文管理者 / 118
5.2.3 等待接收并處理IPC通信請求 / 120
5.3 Server的啟動和Service的注冊過程 / 128
5.3.1 創建ProcessState對象 / 129
5.3.2 獲取servicemanager的代理對象 / 131
5.3.3 注冊Service / 139
5.3.4 Server進程開啟線程池 / 145
5.4 Client端使用服務代理對象 / 146
5.5 服務代理與服務通信 / 149
5.6 本章小結 / 152
第6章 Binder在Java框架層的實現 / 153
6.1 Java系統服務的創建過程 / 153
6.1.1 創建JavaBBinderHolder對象 / 155
6.1.2 JavaBBinder的作用 / 156
6.1.3 gBinderOffsets結構體解析 / 156
6.2 Java系統服務的注冊過程 / 159
6.2.1 調用BinderInternal.getContextObject方法 / 160
6.2.2 調用ServiceManagerNative.asInterface方法 / 165
6.2.3 調用ServiceManagerProxy. addService方法注冊服務 / 167
6.3 Client端獲取服務代理 / 169
6.3.1 獲取服務的BinderProxy / 170
6.3.2 構造服務的Proxy對象 / 172
6.3.3?構造服務管理者對象 / 173
6.4?Client端調用Java系統服務的方法 / 174
6.5?統一的通信接口AIDL / 177
6.5.1?AIDL實例 / 177
6.5.2?AIDL語法 / 180
6.5.3?處理自定義數據類型的傳遞 / 181
6.6?本章小結 / 182
第四部分 消息通信篇
第7章?線程消息通信與異步處理 / 184
7.1?什么是Looper線程 / 184
7.2?第一步:Looper線程準備階段 / 185
7.2.1?創建Java層的Looper對象 / 186
7.2.2?創建Java層的MessageQueue對象 / 186
7.2.3?創建Native層的NativeMessage-Queue和Looper對象 / 187
7.2.4?NativeMessageQueue關聯到MessageQueue / 189
7.3?第二步:創建消息處理器并發送消息 / 190
7.3.1?Handler的創建和初始化 / 190
7.3.2?Message的創建和初始化 / 191
7.3.3?消息的發送過程 / 192
7.4?第三步:Looper線程循環階段 / 198
7.4.1?記錄并獲取當前線程身份信息 / 198
7.4.2?循環監聽消息 / 199
7.4.3?分發消息到處理器 / 205
7.4.4?回收消息并更新消息池 / 209
7.5?異步任務類AsyncTask / 210
7.5.1?AsyncTask的實現 / 211
7.5.2?AsyncTask的執行 / 214
7.6?本章小結 / 223
第五部分 Package Manager篇
第8章?Package Manager 的機制與實現 / 226
8.1 Package Manager體系結構 / 227
8.1.1?三層體系結構 / 227
8.1.2?三層之間的關系 / 228
8.2?PackageManagerService的啟動過程 / 231
8.2.1?創建并初始化Settings對象 / 232
8.2.2?獲取系統默認配置 / 236
8.2.3?啟動PackageHandler / 237
8.2.4?創建data目錄并初始化UserManager / 239
8.2.5?解析系統permission和feature信息 / 242
8.2.6?解析packages文件 / 245
8.2.7?dexopt優化判定 / 247
8.2.8?啟動FileObserver監控APK文件的目錄 / 250
8.2.9?調用scanDirLI方法掃描并安裝APK包 / 252
8.2.10?更新packages文件 / 253
8.3? PackageManagerService啟動過程使用的核心組件 / 254
8.3.1?Java層的Installer / 255
8.3.2?Installd中的命令 / 258
8.4?本章小結 / 260
第9章 APK的安裝過程 / 261
9.1 通過scanDirLI方法安裝APK / 261
9.1.1 創建PackageParser / 262
9.1.2 解析AndroidManifest.xml文件 / 263
9.1.3 過濾PackageParser.Package類型的pkg對象 / 270
9.1.4 解析和安裝pkg / 274
9.2 使用adb命令安裝應用程序 / 282
9.2.1 通過消息機制安裝指定的APK / 283
9.2.2 調用handleStartCopy方法處理安裝操作 / 286
9.2.3 調用handleReturnCode方法處理返回結果 / 290
9.3 本章小結 / 293
第六部分 Activity Manager篇
第10章 Activity Manager的機制與實現 / 296
10.1 Activity Manager概述 / 296
10.2 ActivityManagerService在系統啟動階段的主要工作 / 297
10.3 第一階段:啟動ActivityManagerService / 299
10.3.1 啟動AThread線程 / 300
10.3.2 創建ActivityThread對象 / 302
10.3.3 創建ActivityStack類 / 309
10.3.4 調用startRunning方法 / 310
10.4 第二階段:調用setSystemProcess方法 / 310
10.4.1 查詢并處理ApplicationInfo / 312
10.4.2 創建并初始化ProcessRecord / 313
10.5 第三階段:調用install-SystemProviders方法 / 315
10.5.1 查詢Content Provider / 316
10.5.2 安裝Content Provider / 317
10.6 第四階段:調用systemReady方法 / 323
10.6.1 發送ACTION_PRE_BOOT_COMPLETED廣播 / 323
10.6.2 清理預啟動的非persistent進程 / 325
10.6.3 讀取Settings配置 / 326
10.6.4 運行Runnable回調接口 / 327
10.6.5 啟動persistent應用程序和Home / 328
10.7 本章小結 / 329
第11章 應用程序Activity的啟動和調度 / 330
11.1 啟動應用程序Activity時在Client端的執行流程 / 330
11.2 啟動應用程序Activity時在Server端的執行流程 / 334
11.2.1 預啟動 / 334
11.2.2 暫停 / 348
11.2.3 啟動應用程序進程 / 356
11.2.4 加載應用程序Activity / 362
11.2.5 顯示Activity / 369
11.2.6 Activity Idle狀態的處理過程 / 379
11.2.7 停止源Activity / 382
11.3 本章小結 / 387
第12章 Activity Manager進程管理 / 388
12.1 LRU weight機制 / 388
12.2 OOM adj機制 / 391
12.2.1 更新OOM adj值 / 392
12.2.2 OOM adj的計算過程 / 403
12.3 Low Memory Killer機制 / 414
12.3.1 OOM adj等級和最小內存閾值 / 414
12.3.2 LM Killer機制的實現 / 417
12.4 本章小結 / 419 |
序: |