編輯:關於Android編程
Android啟動過程:
(1)啟動時首先啟動Linux基礎系統,然後引導加載Linux Kernel並啟動初始化進程。
(2)接著,啟動Linux守護進程(deamons),該進程啟動內容:
啟動USB守護進程(usbd)來管理USB連接,
啟動Android Debug Bridge守護進程(adbd)來管理adb連接,
啟動Debug守護進程(debuggerd)來管理調試進程的請求(包括內存轉換),
啟動無線接口守護進程(rild)來管理無線通信
(3)啟動Linux守護進程同時,啟動Zygote進程,該進程啟動內容:
初始化一個Davlik虛擬機實例
裝載Socket請求所需的類和監聽
創建虛擬機實例來管理應用程序進程
(4)再接著,初始化runtime進程,該進程啟動需要處理操作:
初始化服務管理器
注冊服務管理器,以它作為默認Binder服務的Context管理器
(5)runtime初始化後,發送一個請求道Zygote,開始啟動服務,Zygote將為系統服務創建一個虛擬機實例,並啟動系統服務。
(6)緊接著,系統服務將啟動原生系統服務,主要包括Surface Flinger和Audio Flinger,這些本地服務將注冊到服務管理器。
(7)原生系統服務啟動Android管理服務,Android管理服務將都被注冊到服務管理器上。
(8)系統加載完所有的服務後會處於等待狀態,等待應用程序運行,每一個應用程序都將啟動一個單獨的進程。
Android應用程序調用底層硬件和服務(三種方式):
(1)App -> Runtime Service -> Lib
應用程序首先在應用層通過Binder IPC調用應用程序框架的Runtime Service,然後通過JNI與運行庫的原生服務綁定,並動態加載Hal庫,進而調用Linux內核層的Lernel Driver。
(2)App -> Runtime Service -> Native Service -> Lib
與第一種相比,只是Runtime Service通過JNI綁定原生服務,再通過IPC機制調用原生服務進行動態加載的過程。
(3)App -> Runtime Service -> Native Deamon -> Lib
比原生服務調用更簡單,直接通過JNI綁定原生服務,再通過Socket調用守護進程進行動態加載。
目錄結構如下:Http協議的封裝:使用http協議有request和response這兩個主要的域,下邊是Http協議封裝的結構圖(1)HttpRequestInter.
?? Android開發中,我們可能會遇到過一些很復雜的布局,對於初學者來說,可能腦子會嗡的一下,“這麼復雜!該怎麼整?!”。 不要擔心!再復雜的
正如我們知道的,android是不讓在子線程中更新ui的。在子線程中更新ui會直接拋出異常Only the original thread that created a
本文實例為大家分享了Android懸浮窗菜單的具體代碼,供大家參考,具體內容如下MainActivity.java代碼:package siso.multilistvie