Android源碼分析實錄

Android源碼分析實錄 pdf epub mobi txt 電子書 下載 2025

李忠良 著
圖書標籤:
  • Android
  • 源碼
  • Android開發
  • 技術
  • 編程
  • 書籍
  • 移動開發
  • 操作係統
  • 深入分析
  • 源碼閱讀
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302393290
版次:1
商品編碼:11675987
品牌:清華大學
包裝:平裝
開本:16開
齣版時間:2015-04-01
用紙:膠版紙
頁數:740
正文語種:中文

具體描述

編輯推薦

  (1)講解詳盡,深入底層。
  《Android源碼分析實錄》詳細講解瞭Android網絡開發的每一個知識點,為瞭更加說明原理,從深入底層開始,到頂層Java應用結束。即使菜鳥也能夠看懂並掌握。
  (2)大話模式,趣味性更強。
  《Android源碼分析實錄》采用詼諧、生動的大話模式講實例,在逼真的生活場景中學編程,區彆於傳統編程書的古闆,使讀者以快活的心情學習。將復雜的高深專業知識,以趣味性的語言講解齣來。
  (3)實例典型,提示豐富。
  《Android源碼分析實錄》中的實例都是最典型的,最能闡述知識點的應用。融閤瞭技術中所有的經典範例,加深讀者對知識的掌握。
  (4)高深內容的深層剖析,做到一一俱全。
  作為某項專業技術,用最閤理的篇幅詳細剖析瞭每個知識點,內容涉及瞭領域內的方方麵麵,可直接作為此領域的專業書籍。

內容簡介

  Android是一款服務於智能手機和平闆電腦等設備的操作係統,截止作者撰寫此書時為止,Android在智能手機操作係統市場中已經占有75%的份額。為瞭讓廣大讀者充分瞭解這款神奇的操作係統的架構原理,本書循序漸進地分析瞭Android係統核心源碼的基本知識。
  《Android源碼分析實錄》共分為15章,主要內容包括走進Android世界、硬件抽象層詳解、分析JNI(Java本地接口)層、Android內存係統分析、Android虛擬機係統詳解、IPC通信機製詳解、Zygote進程/System進程和應用程序進程、分析Activity組件、ContentProvider數據存儲、Broadcast(廣播)係統詳解、多媒體係統詳解、電源管理係統詳解、輸入係統驅動應用、藍牙係統詳解、網絡係統詳解等。
  《Android源碼分析實錄》幾乎涵蓋瞭Android源碼中的所有核心係統的內容,全書內容通俗易懂,適閤Android初學者、Android愛好者、Android底層開發人員、Android應用開發人員閱讀和學習,也可以作為相關培訓學校和大專院校相關專業的教學用書。

目錄

第1章 走進Android世界 1
1.1 Android係統的優勢 2
1.1.1 開源 2
1.1.2 強大的開發團隊的支持 2
1.1.3 開發人員的支持 2
1.2 Android係統架構介紹 3
1.2.1 底層操作係統層(Linux內核層) 4
1.2.2 庫(Libraries)和運行環境(Runtime) 4
1.2.3 應用程序框架(ApplicationFramework) 5
1.2.4 頂層應用程序(Application) 5
1.3 核心組件 5
1.3.1 Activity的界麵錶現 5
1.3.2 Intent和IntentFilters界麵切換 6
1.3.3 Service服務 6
1.3.4 用Broadcast IntentReceiver廣播 7
1.3.5 用Content Provider存儲 7
1.4 進程和綫程 7
1.4.1 什麼是進程 7
1.4.2 什麼是綫程 8
1.5 獲取Android 4.3源碼 8
1.5.1 在Linux係統中獲取Android源碼 8
1.5.2 在Windows平颱上獲取Android源碼 9
1.6 Android源碼結構分析 14
1.6.1 Android源碼的目錄結構 15
1.6.2 應用程序 16
1.6.3 應用程序框架 18
1.6.4 係統服務 19
1.6.5 係統程序庫 21
1.6.6 係統運行庫 24
1.6.7 硬件抽象層 25
1.7 編譯Android源碼 26
1.7.1 搭建編譯環境 27
1.7.2 開始編譯 27
1.7.3 在模擬器中運行 29
1.7.4 編譯源碼生成SDK 30
第2章 硬件抽象層詳解 35
2.1 什麼是HAL層 36
2.1.1 為什麼把對硬件的支持劃分為兩層來實現 36
2.1.2 HAL層的位置結構 36
2.2 分析HAL Module架構 38
2.2.1 hw_module_t 39
2.2.2 hw_module_methods_t 40
2.2.3 hw_device_t 40
2.3 分析文件hardware.c 41
2.3.1 函數hw_get_module 41
2.3.2 數組variant_keys 41
2.3.3 載入相應的庫 42
2.3.4 打開相應庫並獲得hw_module_t結構體 43
2.4 分析硬件抽象層的加載過程 44
2.5 分析硬件訪問服務 48
2.5.1 定義硬件訪問服務接口 48
2.5.2 實現硬件訪問服務 49
2.6 分析mokoid工程 50
2.6.1 直接調用Service方法實現 51
2.6.2 通過Manager調用Service實現 56
2.7 分析HAL層的具體實現(以Sensor係統為例) 59
2.7.1 傳感器係統的基礎知識 59
2.7.2 HAL層的Sensor代碼 60
2.7.3 Sensor編程的流程 61
第3章 分析JNI(Java本地接口)層 63
3.1 JNI基礎 64
3.1.1 JNI的層次結構 64
3.1.2 JNI的本質 64
3.1.3 與JNI相關的文件 65
3.2 分析Java層 66
3.2.1 加載JNI庫 66
3.2.2 實現掃描工作 68
3.2.3 讀取並保存信息 69
3.2.4 刪除不是SD卡中的文件信息 72
3.2.5 直接轉嚮JNI 72
3.2.6 掃描函數scanFile 73
3.2.7 異常處理 73
3.3 分析MediaScanner的JNI層 74
3.3.1 將Native對象的指針保存到Java對象 75
3.3.2 創建Native層的MediaScanner對象 75
3.4 分析MediaScanner的Native層 76
3.4.1 注冊JNI函數 76
3.4.2 完成注冊工作 78
3.4.3 動態注冊 80
3.4.4 處理路徑參數 82
3.4.5 掃描文件 83
3.4.6 添加TAG信息 83
3.4.7 JNIEnv接口 85
3.4.8 JNI中的環境變量 86
3.5 JNI實例分析(基於Camera係統) 87
3.5.1 Java層預覽接口 87
3.5.2 注冊預覽的JNI函數 89
3.5.3 C/C++層的預覽函數 92
第4章 Android內存係統分析 95
4.1 Android的進程通信機製 96
4.1.1 Android的進程間通信(IPC)機製Binder 96
4.1.2 Service Manager是Binder機製的上下文管理者 97
4.2 分析Ashmem驅動程序 98
4.2.1 基礎數據結構 98
4.2.2 初始化處理 99
4.2.3 打開匿名共享內存設備文件 101
4.2.4 內存映射 104
4.2.5 讀寫操作 105
4.2.6 鎖定和解鎖 107
4.2.7 迴收內存塊 113
4.3 分析C++訪問接口層 115
4.3.1 接口MemoryHeapBase 115
4.3.2 接口MemoryBase 125
4.4 分析Java訪問接口層 128
4.5 內存優化機製 132
4.5.1 sp和wp簡析 132
4.5.2 詳解智能指針 134
4.5.3 輕量級指針 136
4.5.4 強指針 139
4.5.5 弱指針 153
第5章 Android虛擬機係統詳解 159
5.1 Android虛擬機基礎 160
5.1.1 Android虛擬機源碼目錄 160
5.1.2 Dalvik的架構 161
5.1.3 Dalvik虛擬機的主要特徵 163
5.1.4 Dalvik的進程管理 163
5.1.5 Android的初始化流程 163
5.2 分析Dalvik的運作流程 164
5.2.1 Dalvik虛擬機相關的可執行程序 164
5.2.2 初始化Dalvik虛擬機 167
5.2.3 啓動Zygote 186
5.2.4 啓動SystemServer進程 190
5.2.5 加載class類文件 193
5.3 Dalvik VM的內存係統 197
5.3.1 如何分配內存 197
5.3.2 分析內存管理機製的源碼 199
5.4 分析Dalvik VM的啓動過程 211
5.4.1 創建一個Dalvik VM實例 211
5.4.2 指定控製選項 212
5.4.3 創建並初始化Dalvik VM實例 220
5.4.4 創建JNIEnvExt對象 223
5.4.5 設置當前進程 229
5.4.6 注冊Android核心類的JNI方法 229
5.4.7 使用綫程創建javaCreateThreadEtc鈎子 233
5.5 創建Dalvik VM進程 233
5.5.1 分析底層啓動過程 234
5.5.2 創建Dalvik VM進程 234
5.5.3 初始化運行的Dalvik VM 238
第6章 IPC通信機製詳解 241
6.1 Binder機製概述 242
6.2 分析Binder驅動程序 243
6.2.1 分析數據結構 243
6.2.2 分析設備初始化 255
6.2.3 打開Binder設備文件 257
6.2.4 內存映射 258
6.2.5 釋放物理頁麵 264
6.2.6 分配內核緩衝區 264
6.2.7 釋放內核緩衝區 267
6.2.8 查詢內核緩衝區 269
6.3 Binder封裝庫 270
6.3.1 Binder庫的實現層次 270
6.3.2 類BBinder 271
6.3.3 類BpRefBase 274
6.3.4 類IPCThreadState 275
6.4 初始化Java層Binder框架 279
第7章 Zygote進程、System進程和應用程序進程 283
7.1 Zygote(孕育)進程詳解 284
7.1.1 Zygote基礎 284
7.1.2 分析Zygote的啓動過程 285
7.2 System進程詳解 303
7.2.1 啓動System進程前的準備工作 303
7.2.2 分析SystemServer 304
7.2.3 分析EntropyService 308
7.2.4 分析DropBoxManagerService 310
7.2.5 分析DiskStatsService 318
7.2.6 分析DeviceStorageManagerService 323
7.2.7 分析SamplingProfilerService 326
7.3 應用程序進程詳解 336
7.3.1 創建應用程序 336
7.3.2 啓動綫程池 347
7.3.3 創建信息循環 348
第8章 分析Activity組件 351
8.1 Activity基礎 352
8.1.1 Activity的狀態 352
8.1.2 Activity的主要函數 353
8.2 啓動Activity 355
8.2.1 Launcher啓動應用程序 356
8.2.2 返迴ActivityManagerService的遠程接口 358
8.2.3 解析intent的內容 359
8.2.4 分析檢查機製 363
8.2.5 執行Activity組件的操作 378
8.2.6 將Launcher推入Paused狀態 386
8.2.7 處理消息 388
8.2.8 報告暫停 389
8.2.9 建立雙嚮連接 394
8.2.10 啓動新的Activity 400
8.2.11 發送通知信息 403
第9章 Content Provider數據存儲 405
9.1 Content Provider基礎 406
9.1.1 Content Provider在應用程序中的架構 406
9.1.2 Content Provider的常用接口 407
9.2 啓動Content Provider 408
9.2.1 獲得對象接口 408
9.2.2 存在校驗 410
9.2.3 啓動Android應用程序 416
9.2.4 根據進程啓動Content Provider 416
9.2.5 處理消息 422
9.2.6 具體啓動 423
9.3 Content Provider數據共享 427
9.3.1 獲取接口 427
9.3.2 創建CursorWindow對象 430
9.3.3 數據傳遞 433
9.3.4 處理進程通信的請求 436
9.3.5 數據操作 442
第10章 Broadcast(廣播)係統詳解 447
10.1 Broadcast基礎 448
10.2 發送廣播信息 448
10.2.1 intent描述指示 449
10.2.2 傳遞廣播信息 449
10.2.3 封裝傳遞 450
10.2.4 處理發送請求 451
10.2.5 查找廣播接收者 451
10.2.6 處理廣播信息 455
10.2.7 檢查權限 464
......










精彩書摘

  第1章
  走進Android世界
  Android係統於2007年誕生,是一款建立在Linux內核之上的智能設備係統,是一款經典的手機、平闆電腦等移動設備的軟件解決方案。從2011年下半年開始到現在,Android係統在全球智能手機操作係統中的占有率一直位居第一。
  本章將簡單介紹Android係統的發展曆程和背景,讓讀者瞭解Android係統的發展之路,充分體驗這款無與倫比的操作係統。
  1.1Android係統的優勢
  為什麼Google的Android(安卓)係統能夠在短短4年內超越瞭Symbian(塞班)、Blackberry
  (黑莓)、iOS等前輩,從一名後起之秀變為移動智能設備市場占有率的大佬?這需要從Android係統的優勢談起,在本節的內容中,將為讀者展示這些優勢。
  1.1.1開源
  Google的Android齣身於Linux世傢,是一款開源的手機操作係統。正因為如此,在Android嶄露頭角之後,各大手機廠商和電信部門紛紛加入到瞭Android聯盟中。這個聯盟由業界內的公認大佬組成,主要成員包括Google、中國移動、摩托羅拉、高通和T-Mobile等在內的30多傢技術和無綫應用的領軍企業。Android通過與運營商、設備製造商、開發商和其他有關各方結成深層次的閤作夥伴關係,希望通過建立標準化、開放式的移動電話軟件平颱,在移動産業內形成一個開放式的生態係統。
  開源意味著對開發人員和手機廠商來說,Android是完全無償免費使用的。正是因為源代碼公開的原因,所以吸引瞭全世界各地無數程序員的熱情。於是很多手機廠商都紛紛采用Android作為自己産品的係統,這當然也包括很多山寨廠商。因為免費,所以降低瞭成本,因而提高瞭利潤。而對於開發人員來說,因為Android被眾多移動設備産品所采用,所以這方麵的人纔也變得愈發搶手。於是有一些在彆的係統上乾得還可以的程序員也改行做Android開發,紛紛加入到Android開發大軍中來,原因是待遇更好;另外,也有很多混得不盡如人意的程序員更是紛紛改行做Android手機開發,目的是想尋找自己程序員生涯的轉機。
  而像本書作者這樣遇到發展瓶頸的程序員,後來也決定做Android開發,因為這樣可以學習一門新的技術,使自己的未來更加有保障。
  1.1.2強大的開發團隊的支持
  Android的研發隊伍陣容強大,包括Google、摩托羅拉、HTC(宏達電子)、Philips、T-Mobile、高通、魅族、三星、LG以及中國移動在內的34傢企業,這些企業都基於Android平颱開發手機的新型業務,並使應用之間的通用性和互聯性在最大程度上得到保持。從硬件到軟件開發機構,再到電信服務商,Android從一開始便成為業界內的寵兒,被當作新秀而重點培養,在強大的開發團隊的培育和嗬護下,順利地功成名就,成為一方霸主。
  1.1.3開發人員的支持
  Google一直視程序員為前進的動力和源泉,為瞭提高程序員們的開發積極性,不但為開發人員提供瞭一流的開發裝備和軟件服務,而且還提齣瞭振奮人心的奬勵機製。
  具體的開發人員支持主要體現在如下三個方麵。
  (1)可以迅速步入Android應用開發。在Android平颱上,程序員可以開發齣各式各樣的應用。Android應用程序是通過Java語言開發的,隻要具備Java開發基礎,就能很快地上手並掌握。對於單獨的Android應用開發來說,並沒有很高的Java編程門檻,即使沒有編程經驗的門外漢,也可以在突擊學習Java之後很快掌握Android編程。另外,Android完全支持2D、3D和數據庫,並且與瀏覽器實現瞭集成。所以,通過Android平颱,程序員可以迅速、高效地開發齣絢麗多彩的應用,例如常見的工具、管理程序、互聯網程序和遊戲程序等。
  (2)可以參加奬金豐厚的Android大賽。為瞭吸引更多的用戶使用Android開發,Google定期舉辦奬金為數韆萬美元的開發者競賽,鼓勵開發人員做齣創意十足的軟件。這種大賽對於開發人員來說,不但能磨練自己的開發水平,並且高額奬金本身也是吸引學習的動力。
  (3)可以加入自由經營的貿易市場。為瞭能讓Android平颱吸引更多的關注,Google提供瞭一個專門下載Android應用的門店:AndroidMarket,網址是https://play.google.com/store。在這個門店裏麵,允許開發人員發布應用程序,也允許Android用戶下載自己喜歡的程序。作為開發者,需要申請開發者賬號,申請後纔能將自己的程序上傳到AndroidMarket,並且可以對自己的軟件進行定價。隻要你的軟件程序足夠吸引人,就可以獲得很好的迴報。學習和賺錢兩不誤,我們何樂而不為呢?
  1.2Android係統架構介紹
  Android是一個移動設備的開發平颱,其軟件層次結構大體上包括操作係統(OS)、中間件(Middleware)和應用程序(Application)。
  Android操作係統的組件結構如圖1-1所示。
  圖1-1Android操作係統的組件結構
  根據Android操作係統的組件結構框圖可知,其軟件層次結構自下而上分為4層。
  (1)操作係統層(即Linux內核層)。
  (2)各種庫(Libraries)和Android運行環境(Runtime)。
  (3)應用程序框架(ApplicationFramework)。
  (4)應用程序(Application)。
  1.2.1底層操作係統層(Linux內核層)
  因為Android源於Linux,使用瞭Linux內核,所以Android使用Linux2.6作為操作係統。Linux2.6是一種標準的技術,Linux也是一個開放的操作係統。Android對操作係統的使用包括核心和驅動程序兩部分,Android的Linux核心為標準的Linux2.6內核,Android更多的是需要一些與移動設備相關的驅動程序。主要的驅動程序如下所示。
  ?顯示驅動(DisplayDriver):是常用的基於Linux的幀緩衝(FrameBuffer)驅動程序。
  ?Flash內存驅動(FlashMemoryDriver):是基於MTD的Flash驅動程序。
  ?照相機驅動(CameraDriver):常用基於Linux的V4L(VideoforLinux)驅動程序。
  ?音頻驅動(AudioDriver):常用基於ALSA(AdvancedLinuxSoundArchitecture,高級Linux聲音體係)的驅動程序。
  ?Wi-Fi驅動(Wi-FiDriver):基於IEEE802.11標準的驅動程序。
  ?鍵盤驅動(KeyboardDriver):作為輸入設備的鍵盤驅動程序。
  ?藍牙驅動(BluetoothDriver):基於IEEE802.15.1標準的無綫傳輸技術驅動程序。
  ?BinderIPC驅動:具有單獨的設備節點,提供進程間通信功能的特殊驅動程序。
  ?PowerManagement(電源管理):用於管理電池電量等信息的驅動程序。
  1.2.2庫(Libraries)和運行環境(Runtime)
  本層次對應一般的嵌入式係統,相當於中間件層次。Android的本層次分成兩個部分,一個是各種庫,另一個是Android運行環境。本層的內容大多是使用C語言實現的,其中包含瞭如下所示的各種庫。
  ?C庫:C語言的標準庫,也是係統中一個最為底層的庫,C庫是通過Linux的係統調用實現的。
  ?多媒體框架(MediaFramework):這部分內容是Android多媒體的核心部分,基於PacketVideo(即PV)的Opencore,從功能上看,本庫分為兩大部分,一部分是音頻、視頻的迴放(PlayBack),另一部分是則是音視頻的記錄(Recorder)。
  ?SGL:2D圖像引擎。
  ?SSL:即SecureSocketLayer,位於TCP/IP協議與各種應用層協議之間,為數據通信提供安全支持。
  ?OpenGLES:提供瞭對3D的支持。
  ?界麵管理工具(SurfaceManagement):提供管理顯示子係統等功能。
  ?SQLite:一個通用的嵌入式數據庫。
  ?WebKit:網絡瀏覽器的核心。
  ?FreeType:位圖和矢量字體的功能。
  在一般情況下,Android的各種庫是以係統中間件的形式提供的,它們的顯著特點是與移動設備平颱的應用密切相關。
  另外,Android的運行環境主要是基於Dalvik(虛擬機)技術的。而Dalvik與一般的Java虛擬機(JavaVirtualMachine,JVM)是有如下區彆的。
  ?Java虛擬機:執行的是Java標準的字節碼(Bytecode)。
  ?Dalvik:執行的是Dalvik可執行格式(.dex)的文件。在執行的過程中,每一個應用程序即一個進程(Linux的一個Process)。
  二者最大的區彆在於,JVM是基於棧的虛擬機(Stack-based),而Dalvik是基於寄存器的虛擬機(Register-based)。顯然,後者最大的好處在於可以依據硬件實現更大的優化,這更適閤移動設備的特點。
  1.2.3應用程序框架(ApplicationFramework)
  在整個Android係統中,與應用開發最相關的是ApplicationFramework,在這一層,Android為應用程序層的開發者提供瞭各種功能強大的APIs,這實際上是一個應用程序的框架。由於上層的應用程序是以Java構建的。在本層提供瞭程序中所需要的各種控件,例如:Views(視圖組件)、List(列錶)、Grid(柵格)、TextBox(文本框)、Button(按鈕),甚至還有一個嵌入式的Web瀏覽器。
  一個基本的Android應用程序可以利用應用程序框架中的以下5個部分。
  ?Activity:活動。
  ?BroadcastIntentReceiver:廣播意圖接收者。
  ?Service:服務。
  ?ContentProvider:內容提供者。
  ?IntentandIntentFilter:意圖和意圖過濾器。
  1.2.4頂層應用程序(Application)
  Android的應用程序主要是用戶界麵(UserInterface)方麵的,本層通常使用Java語言編寫,其中還可以包含各種被放置在“res”目錄中的資源文件。Java程序和相關資源在經過編譯後,會生成一個APK包。Android本身提供瞭主屏幕(Home)、聯係人(Contact)、電話(Phone)、瀏覽器(Browsers)等眾多的核心應用。同時,應用程序的開發者還可以使用應用程序框架層的API實現自己的程序。這也是Android開源的巨大潛力的體現。
  注意:我們目的是分析Android係統的源碼,因為涉及的知識麵涵蓋瞭所有上述4個層次,所以學習過程任重而道遠。
  1.3核心組件
  一個典型的Android程序通常由5個組件組成,這5個組件構成瞭Android的核心功能。在分析Android4.3源碼之前,本節將詳細講解Android應用程序的核心組件的基本知識。
  1.3.1Activity的界麵錶現
  Activities是這5個組件中最常用的一個組件。程序中Activity通常的錶現形式是一個單獨的界麵(screen)。每個Activity都是一個單獨的類,它擴展實現瞭Activity基礎類。這個類顯示為一個由Views組成的用戶界麵,並響應事件。大多數程序有多個Activity。例如,一個文本信息程序有這麼幾個界麵:顯示聯係人列錶界麵、寫信息界麵、查看信息界麵或者設置界麵等。每個界麵都是一個Activity。切換到另一個界麵就是載入一個新的Activity。某些情況下,一個Activity可能會給前一個Activity返迴值——例如,一個讓用戶選擇相片的Activity會把選擇到的相片返迴給其調用者。
  打開一個新界麵後,前一個界麵就被暫停,並放入曆史棧中(界麵切換曆史棧)。使用者可以迴溯前麵已經打開的存放在曆史棧中的界麵。也可以從曆史棧中刪除沒有界麵價值的界麵。Android在曆史棧中保留程序運行産生的所有界麵:從第一個界麵,到最後一個。
  1.3.2Intent和IntentFilters界麵切換
  Android通過一個專門的Intent類來進行界麵的切換。Intent描述瞭程序想做什麼(Intent意為意圖,目的,意嚮)。Intent類還有一個相關類IntentFilter。Intent是一個請求,用來明確做什麼事情,IntentFilter則描述瞭一個Activity(或下文的IntentReceiver)能處理什麼意圖。顯示某人聯係信息的Activity使用瞭一個IntentFilter,就是說,它知道如何處理應用到此人數據的VIEW操作。Activities在文件AndroidManifest.xml中使用IntentFilters。
  通過解析Intents可以實現Activity的切換,我們可以使用startActivity(myIntent)啓用新的Activity。係統會考察所有安裝程序的IntentFilters,然後找到與myIntent匹配最好的IntentFilters所對應的Activity。這個新Activity能夠接收Intent傳來的消息,並因此被啓用。解析Intents的過程發生在startActivity被實時調用時,這樣做有如下兩個好處:
  ?Activities僅發齣一個Intent請求,便能重用其他組件的功能。
  ?Activities可以隨時被替換為有等價IntentFilter的新Activity。
  1.3.3Service服務
  Service是一個沒有用戶界麵(UI)且長駐係統的代碼,最常見的例子是媒體播放器從播放列錶中播放歌麯。在媒體播放器程序中,可能有一個或多個Activities讓用戶選擇播放的歌麯。然而在後颱播放歌麯時無需Activity乾涉,因為用戶希望在音樂播放的同時能夠切換到其他界麵。既然這樣,媒體播放器Activity需要通過Context.startService()啓動一個Service,這個Service在後颱運行以保持繼續播放音樂。在媒體播放器被關閉之前,係統會保持音樂後颱播放Service的正常運行。可以用Context.bindService()方法連接到一個Service上(如果Service未運行的話,連接後還會啓動它),連接後就可以通過一個Service提供的接口與Service進行通話。對音樂Service來說,提供瞭暫停和重放等功能。
  Android係統將會嘗試保留那些啓動瞭的或者綁定瞭的服務進程,具體說明如下。
  (1)如果該服務正在進程的onCreate()、onStart()或者onDestroy()這些方法中執行,那麼主進程將會成為一個前颱進程,以確保此代碼不會被停止。
  (2)如果服務已經開始,那麼它的主進程的重要性會低於所有的可見進程,但是會高於不可見進程。由於隻有少數幾個進程是用戶可見的,所以,隻要不是內存特彆低,該服務就不會停止。
  (3)如果有多個客戶端綁定瞭服務,隻要客戶端中的一個對於用戶是可見的,就可以認為該服務可見。
  1.3.4用BroadcastIntentReceiver廣播
  當要執行一些與外部事件相關的代碼時,比如來電響鈴時,或者到半夜時,就可能用到IntentReceiver。盡管IntentReceivers使用NotificationManager來通知用戶一些好玩事情的發生,但沒有用戶界麵。
  IntentReceivers可以在文件AndroidManifest.xml中聲明,也可以用Context.registerReceiver()來聲明。當一個IntentReceiver被觸發時,如果需要,係統自然會自動啓動程序。程序也可以通過Context.broadcastIntent()來發送自己的Intent廣播給其他程序。
  1.3.5用ContentProvider存儲
  在Android係統中,應用程序將數據存放在一個SQLite數據庫格式的文件裏,或者存放在其他有效設備裏。如果想讓其他程序能夠使用我們程序中的數據,此時ContentProvider就很有用瞭。ContentProvider是一個實現瞭一係列標準方法的類,這個類使得其他程序能存儲、讀取某種ContentProvider可處理的數據。
  1.4進程和綫程
  在Android係統中,進程和綫程用於完成某個Android任務。當第一次運行某個組件的時候,Android會啓動一個進程。在默認情況下,所有的組件和程序運行在這個進程和綫程中,也可以安排組件在其他的進程或者綫程中運行。在本節的內容中,將簡要介紹Android係統中進程和綫程的基本知識。
  1.4.1什麼是進程
  組件運行的進程是由manifest文件控製的。組件的節點一般都包含一個process屬性,例如、、和節點。
  屬性process可以設置組件運行的進程,可以配置組件在一個獨立進程中運行,或者多個組件在同一個進程中運行,甚至可以讓多個程序在一個進程中運行,當然前提是這些程序共享一個UserID並給定同樣的權限。另外,節點也包含瞭process屬性,用來設置程序中所有組件的默認進程。
  當更加常用的進程無法獲取足夠的內存時,Android會智能地關閉不常用的進程。當下次啓動程序的時候,會重新啓動這些進程。
  當決定哪個進程需要被關閉的時候,Android會考慮進程對用戶是否還有用。例如Android會傾嚮於關閉一個長期不顯示在界麵的進程來支持一個經常顯示在界麵的進程。是否關閉一個進程,決定於組件在進程中的狀態。
  1.4.2什麼是綫程
  當用戶界麵需要快速對用戶操作進行響應時,就需要將一些費時的操作,如網絡連接、下載或者非常占用服務器時間的操作等放到其他綫程中。也就是說,即使為組件分配瞭不同的進程,有時候也需要再分配綫程。
  綫程是通過Java的標準對象Thread來創建的,在Android中提供瞭如下管理綫程的方法。
  (1)Looper可用來在綫程中運行一個消息循環。
  (2)Handler可用來傳遞一個消息。
  (3)HandlerThread可用來創建一個帶有消息循環的綫程。
  (4)Android讓一個應用程序在單獨的綫程中,直到它創建自己的綫程。
  (5)應用程序組件(Activity、Service、BroadcastReceiver)全都在理想的主綫程中實例化。
  (6)當被係統調用時,任何組件都不應該執行長時間或是阻塞的操作(例如網絡調用或是計算循環),否則應該中斷所有在該進程中的其他組件。
  (7)可以創建一個新的綫程來執行長期操作。
  1.5獲取Android4.3源碼
  在分析Android4.3的源碼之前,需要先獲取其源碼。因為目前市麵上的主流操作係統是Windows、Linux和MacOS,由於MacOS屬於類Linux係統,所以本節將講解在Windows係統和Linux係統中獲取Android源碼的知識。
  1.5.1在Linux係統中獲取Android源碼
  在Linux係統中,通常使用Ubuntu來下載和編譯Android源碼。由於Android的源碼內容很多,Google采用瞭git的版本控製工具,並對不同的模塊設置不同的git服務器,我們可以用repo自動化腳本來下載Android源碼,下麵介紹如何一步一步地獲取Android源碼的過程。
  (1)下載repo
  在用戶目錄下,創建bin文件夾,用於存放repo,並把該路徑設置到環境變量中去,命令如下:
  $mkdir~/bin
  $PATH=~/bin:$PATH
  下載repo的腳本,用於執行repo,命令如下:
  $curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo>~/bin/repo
  設置可執行權限,命令如下:
  $chmoda+x~/bin/repo
  (2)初始化一個repo的客戶端
  在用戶目錄下,創建一個空目錄,用於存放Android源碼,命令如下:
  $mkdirAndroidCode
  $cdAndroidCode
  進入到AndroidCode目錄,並運行repo來下載源碼,下載主綫分支的代碼,主綫分支包括最新修改,以及並未正式發齣版本的最新源碼,命令如下:
  $repoinit-uhttps://android.googlesource.com/platform/manifest
  下載其他分支,即正式發布的版本,可以通過添加-b參數來下載,命令如下:
  $repoinit-uhttps://android.googlesource.com/platform/manifest-b
  android-4.2_r1
  ……

《Android底層技術探索:從內核到框架的深度解析》 內容簡介: 在移動智能設備日益普及的今天,Android操作係統已成為絕大多數智能手機和平闆電腦的核心。然而,對於大多數開發者而言,他們所接觸的Android世界,往往僅僅停留在應用層API的調用與UI交互的層麵。那些支撐起這一切的底層機製,諸如Linux內核的驅動模型、Binder IPC的運行原理、ART虛擬機的工作機製,以及係統服務的啓動與管理,對於許多人來說,依舊是神秘而難以觸及的黑箱。 本書《Android底層技術探索:從內核到框架的深度解析》旨在揭開Android底層技術的神秘麵紗,帶領讀者深入Android操作係統的“心髒”地帶,進行一場全方位的技術探索。我們不局限於某個單一組件的錶麵介紹,而是力求從硬件抽象層(HAL)開始,逐步深入Linux內核,解析驅動程序的工作原理,理解Android特有的進程間通信(IPC)機製——Binder,探究ART虛擬機如何加載和執行Dalium字節碼,以及Android係統服務是如何被啓動、管理和調用的。我們將係統地梳理Android係統的啓動流程,剖析其核心組件的相互協作關係,並深入分析一些關鍵的係統服務,例如Activity Manager Service、Window Manager Service、PackageManager Service等,理解它們在整個Android生態係統中所扮演的角色和實現細節。 本書內容設計嚴謹,邏輯清晰,從宏觀到微觀,層層遞進,力求讓讀者對Android底層技術有一個係統、深刻的認識。我們將不僅僅停留在理論的闡述,更會結閤實際的源碼分析,通過代碼片段和運行流程圖,生動地展示底層技術的實現細節。我們鼓勵讀者在閱讀過程中,積極動手實踐,通過調試和追蹤,親身體驗Android底層技術的魅力。 本書章節要點預覽: 第一部分:Linux內核與硬件抽象層(HAL) Linux內核基礎: Android係統的Linux內核定製:理解Android為何選擇Linux作為基石,以及其在內核層麵的定製與優化,例如對電源管理、內存管理、進程調度等方麵的調整。 設備驅動模型:深入講解Linux內核的驅動模型,包括字符設備、塊設備、網絡設備驅動的通用接口與實現方式。 Android特有的內核模塊:分析Android係統中一些關鍵的內核模塊,例如GPS、Wi-Fi、藍牙、傳感器等驅動程序的工作原理。 硬件抽象層(HAL): HAL的設計理念與目標:理解HAL的設計初衷,即為上層框架提供統一的硬件接口,屏蔽底層硬件的多樣性。 HAL接口與實現:講解HAL接口(.hal文件)的定義方式,以及不同硬件廠商提供的HAL實現(.so庫)是如何與上層框架進行交互的。 HAL的服務啓動與管理:分析HAL服務是如何在係統啓動過程中被初始化和加載的,以及它們與用戶空間服務之間的通信機製。 第二部分:Binder IPC機製 IPC基礎迴顧: 簡要迴顧傳統的IPC機製,例如Socket、共享內存等,為理解Binder的優勢做鋪墊。 Binder的核心概念: 深入剖析Binder的核心組件,包括Binder驅動、Binder Client、Binder Server、Binder Proxy、Binder Death Recipient等,理解它們之間的交互關係。 Binder的架構設計: 詳細解析Binder的架構,包括用戶空間和內核空間如何協同工作,以及Binder在數據傳輸、內存管理、綫程池等方麵的優化策略。 AIDL(Android Interface Definition Language): 學習AIDL的語法,理解如何通過AIDL定義跨進程接口,以及AIDL生成代碼的原理。 Binder的應用場景: 分析Binder在Android係統中的廣泛應用,例如Activity Manager Service與應用進程的通信,以及係統服務之間的交互。 第三部分:ART虛擬機與應用執行 Java與Dalvik/ART: 迴顧Java虛擬機(JVM)的工作原理,並介紹Dalvik虛擬機及其演進到ART虛擬機的過程,理解ART的優勢與改進。 Dex文件格式: 深入解析Dex(Dalvik Executable)文件格式,理解其結構,包括Class Definition、Method Definition、Field Definition等。 ART虛擬機啓動與初始化: 分析ART虛擬機在應用啓動時的初始化流程,包括類加載器(ClassLoader)的作用,以及Dex文件的解析與加載。 字節碼到本地代碼: 深入理解ART的即時編譯(JIT)和預編譯(AOT)機製,剖析Java字節碼如何被轉換成高效的本地機器碼,以及代碼優化的策略。 內存管理與垃圾迴收: 探討ART的內存管理機製,包括堆(Heap)的分配與釋放,以及其垃圾迴收(GC)算法的原理與實現。 第四部分:Android係統服務與啓動流程 Android係統啓動流程詳解: 從Bootloader開始,逐步解析Linux內核的加載、init進程的啓動、Zygote進程的孵化,以及System Server的啓動過程。 System Server的核心服務: 深入剖析System Server進程中承載的關鍵係統服務,例如: Activity Manager Service (AMS): 理解AMS如何管理應用的生命周期、任務棧、Activity的啓動與切換。 Window Manager Service (WMS): 講解WMS如何管理窗口的繪製、觸摸事件的分發、窗口的層級關係。 PackageManager Service (PMS): 分析PMS如何管理應用的安裝、卸載、權限,以及解析APK文件的信息。 Power Manager Service (PMS): 探討PMS如何管理設備的電源狀態、休眠與喚醒。 Connectivity Service: 分析網絡連接的管理,包括Wi-Fi、移動網絡、藍牙等。 Binder與係統服務交互: 再次強調Binder在係統服務之間通信中的關鍵作用,分析服務代理(Service Manager)是如何工作的。 HAL與係統服務的協作: 講解係統服務如何通過HAL接口調用底層硬件功能。 第五部分:深入理解Android框架 Framework層架構: 梳理Android框架層的整體架構,包括Core Java API、Framework API,以及它們與Native層和應用層之間的關係。 事件處理機製: 深入分析Android事件處理機製,包括Looper、Handler、MessageQueue的工作原理,以及UI事件的傳遞與響應。 圖形渲染管綫: 剖析Android的圖形渲染管綫,從SurfaceFlinger到Hardware Composer,理解View的繪製過程,以及硬件加速的作用。 綫程模型與並發: 探討Android的綫程模型,包括主綫程(UI綫程)、工作綫程,以及綫程安全問題和同步機製。 本書特色: 源碼驅動: 本書的內容緊密圍繞Android開源項目(AOSP)的源碼展開,提供大量有價值的源碼分析和代碼片段,幫助讀者理解技術的實際實現。 深度解析: 避免淺嘗輒止,對每一個核心技術點都進行深入的剖析,力求揭示其背後的原理和設計思想。 係統全麵: 覆蓋Android從底層內核到上層框架的關鍵技術,構建一個完整的技術圖譜。 實踐導嚮: 鼓勵讀者通過閱讀源碼、調試和實驗來驗證和深化理解,培養解決實際問題的能力。 邏輯清晰: 按照由淺入深、由宏觀到微觀的邏輯順序進行組織,便於讀者循序漸進地學習。 《Android底層技術探索:從內核到框架的深度解析》不僅僅是一本技術書籍,更是一次深入Android心髒的冒險之旅。無論您是希望深入理解Android運行機製的初學者,還是尋求提升技術深度和廣度的資深開發者,本書都將是您寶貴的參考資料,幫助您在Android開發的道路上走得更遠,看得更透。

用戶評價

評分

讀《Android 源碼分析實錄》這本書,我的期望是能夠獲得一種“脫胎換骨”的開發體驗。我非常關注書中對Android係統底層的安全機製的分析,比如權限控製、沙箱隔離等,這些是如何在Framework層麵實現的,以及它們如何為Android應用的安全性保駕護航。此外,Android的圖形渲染管綫也是一個我渴望深入瞭解的領域,從View的繪製到SurfaceFlinger的閤成,再到GPU的渲染,這一係列過程如果能有源碼的支撐,將會是非常有價值的學習材料。我希望書中能解釋清楚,當我們在應用中繪製一個View時,背後的源碼調用是怎樣的,又是如何與Hardware Composer(HWC)等硬件抽象層進行交互的。對於Android的功耗優化,我也非常感興趣,如果書中能結閤源碼分析,揭示係統在低功耗模式下的行為,以及如何通過分析源碼來優化應用的功耗錶現,那就更具實踐意義瞭。總之,我希望這本書能成為我的“敲門磚”,讓我能夠進入Android係統的核心殿堂,真正做到“知其然,更知其所以然”。

評分

在學習Android過程中,很多時候我們隻是停留在API的調用層麵,對於底層原理的理解往往是模糊的。《Android 源碼分析實錄》的標題就點齣瞭其核心價值——深入源碼,剖析本質。我個人非常期待書中能夠詳細講解Android的啓動流程,從bootloader到Kernel,再到init進程,最後到Zygote孵化齣第一個應用進程,這一係列復雜的過程,如果能有清晰的脈絡和源碼佐證,將非常有價值。特彆是Zygote進程,它作為所有Android應用的“母親”,其fork機製、預加載類等優化策略,對於理解應用的快速啓動至關重要。另外,Android的內存管理也是我一直試圖深入理解的部分,除瞭GC之外,內存的分配、迴收、以及各種內存優化技巧,如果書中能夠結閤源碼進行講解,比如ART虛擬機的內存管理細節,那將是極大的幫助。我希望這本書能提供一些實際的案例,通過分析特定場景下的源碼,來佐證其理論的可靠性。比如,當用戶點擊應用圖標後,到應用啓動成功,這一過程中的源碼調用鏈,能讓讀者對整個流程有更直觀的認識。

評分

一本以 Android 源碼為切入點,深入剖析其運行機製的書,我期待已久。當拿到《Android 源碼分析實錄》時,我首先被其厚重的分量所吸引,這預示著內容的深度和廣度。我特彆看重書中能夠不僅僅停留在API的羅列和使用上,而是能夠真正揭示“為什麼”和“如何做”的底層邏輯。例如,在UI繪製方麵,我希望它能深入講解View的measure、layout、draw這三個核心過程,以及它們是如何在SurfaceFlinger的配閤下最終呈現在屏幕上的。更進一步,如果能涉及到Handler、Looper、MessageQueue的異步消息處理機製,並解釋它們在Activity生命周期管理、網絡請求迴調等場景下的關鍵作用,那就再好不過瞭。我希望這本書能夠提供清晰的源碼追蹤路徑,輔以詳實的注釋,讓我能夠跟隨作者的思路,一步步理解Android框架的精妙設計。對於內存管理,如GC(垃圾迴收)機製、內存泄漏的排查方法,以及Bitmap的優化策略,也同樣是我非常感興趣的部分。當然,如果書中還能涉及JNI、IPC(進程間通信)等相對底層但又至關重要的技術,那就更是錦上添花瞭。總而言之,我期待它能成為一本真正能指導我理解Android係統內核,提升開發能力的寶典。

評分

我一直堅信,要真正掌握一門技術,必須深入到其底層。《Android 源碼分析實錄》這本書,對我而言,更像是一本“武功秘籍”,它承諾將Android係統的“內功心法”一一揭示。我特彆期待書中能夠對Android的四大組件(Activity, Service, Broadcast Receiver, Content Provider)的生命周期進行詳盡的源碼解析。不僅僅是調用順序,更重要的是理解它們在Android Framework中的具體實現,以及它們之間是如何通過Binder進行通信的。例如,Activity的啓動和銷毀過程,背後隱藏著ActivityManagerService和WindowManagerService的哪些操作?Service的後颱運行機製又是如何實現的?Broadcast Receiver是如何接收和分發廣播的?Content Provider又是如何實現跨應用的數據共享?這些都是日常開發中必不可少但又容易被忽略的細節。如果書中能夠通過源碼追溯,揭示這些組件背後隱藏的Binder調用、綫程管理、以及狀態機的切換,那將是極大的啓發。我希望這本書能讓我從一個“API使用者”蛻變為一個“係統理解者”。

評分

作為一名在Android開發領域摸爬滾打瞭數年的開發者,我深知紮實的理論功底是應對復雜問題的基石。《Android 源碼分析實錄》的齣現,正是我尋求突破的一個絕佳機會。我特彆關注書中對於Android係統服務(System Services)的解析,比如PackageManagerService、ActivityManagerService等,它們是如何協調整個係統的運行,又是如何為上層應用提供服務的。例如,ActivityManagerService如何管理應用的啓動、暫停、銷毀,以及它與ActivityThread之間的協作關係,這直接關係到我們應用開發的方方麵麵。此外,我對Android的Binder機製也充滿好奇,它作為Android中最重要的IPC手段,其設計理念和實現細節至關重要。如果書中能通過Binder的源碼分析,揭示其跨進程通信的原理,包括Proxy、Stub、Binder Driver等組件的作用,那將極大地拓寬我的視野。同時,Android的權限管理係統是如何工作的,又是如何與PackageManagerService協同進行權限的檢查和授予,這也是我非常希望瞭解的內容。我期待這本書能讓我擺脫對Android框架的“知其然,不知其所以然”的狀態,真正掌握其核心技術,從而在日後的工作中更加遊刃有餘,解決那些看似棘手的難題。

評分

非常滿意的一次網購,非常滿意的一次網購

評分

寶貝很好,希望能用久一點

評分

不建議小白買這本書學習。

評分

內容不錯,可惜代碼版本低瞭一些,下一版要跟上版本的升級

評分

書很厚,內容多,喜歡

評分

書嘛,就那樣,慢慢看。。。。。。

評分

還沒開始看

評分

挺厚的一本書,大神可以忽略。。

評分

書不錯,包裝略簡陋感覺

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有