d01_b_認(rèn)識(shí)android核心服務(wù)_ok_W_第1頁(yè)
d01_b_認(rèn)識(shí)android核心服務(wù)_ok_W_第2頁(yè)
d01_b_認(rèn)識(shí)android核心服務(wù)_ok_W_第3頁(yè)
d01_b_認(rèn)識(shí)android核心服務(wù)_ok_W_第4頁(yè)
d01_b_認(rèn)識(shí)android核心服務(wù)_ok_W_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基於軟硬整合觀點(diǎn)D01_b認(rèn)識(shí)Android核心服務(wù)(b)By 高煥堂基於軟硬整合觀點(diǎn)3、區(qū)分兩種核心服務(wù):Android Service與Native Service 核心服務(wù)可以用Java撰寫(xiě);也可以用C+ 撰寫(xiě)。 以Java撰寫(xiě)的核心服務(wù)通稱(chēng)為Android Service(例如AudioService和SensorService等); 以C+撰寫(xiě)的核心服務(wù)則通稱(chēng)為Native Service (例如MediaPlayerService和CameraService等)。 Android Service又稱(chēng)為Java Service,是實(shí)現(xiàn)于應(yīng)用框架層(Framework)里的。 這里所講

2、的Service是系統(tǒng)服務(wù)(System Service),又稱(chēng)為Server;其與App開(kāi)發(fā)上所討論的Service不同。 Android Service以Java撰寫(xiě)。IBinderAndroid ServiceHAL/驅(qū)動(dòng)硬體Core LibrariesJNI 部分AndroidVMRuntimAndroid App Native Service則是實(shí)現(xiàn)于Runtime層里的Server。在系統(tǒng)服務(wù)開(kāi)發(fā)上,我們有二個(gè)途徑,一個(gè)是寫(xiě)成Android Service、其再透過(guò)JNI與HAL驅(qū)動(dòng)溝通;另一個(gè)途徑是,跳過(guò)Android Service,讓App透過(guò)JNI直接與Native Ser

3、vice溝通。MediaPlayer.javaEX.MediaPlayer.cppIBinder MediaPlayerService.cppOpenCore & DiverAndroid Runtime Core LibrariesJNI 部分VMAndroid AppmyService.javaJNI 部分myService.cppIBinder myServiceHAL/驅(qū)動(dòng)硬體Core LibrariesAndroidVMRuntimeAndroid App基於軟硬整合觀點(diǎn)4、核心服務(wù)的特性 其中,核心服務(wù)屬于Android平臺(tái)的系統(tǒng)服務(wù)模塊,在開(kāi)機(jī)過(guò)程,就會(huì)啟動(dòng)數(shù)十個(gè)核心服務(wù);例如M

4、ediaPlayerService、AudioService、SensorService等。ActivityManagerService WindowManagerServiceVold ServiceAudioFlinger MediaPlayerService CameraServiceLinux Kernel + Drivers + HWRuntimeInit進(jìn)程(讀取init.rc)MediaServerZygoteZygoteVMServiceManagerSurfaceFlingerAndroid Service (Java)Native Service (C+)System Se

5、rver關(guān)于核心服務(wù)的啟動(dòng),就是在開(kāi)機(jī)時(shí),加載Linux kernel部分,進(jìn)行Kernel-Space的初始化,然后加載硬件驅(qū)動(dòng)程序,就啟動(dòng)了Linux系統(tǒng)。隨后切換至User-Space,創(chuàng)建init進(jìn)程,讀取 init.rc文檔,依據(jù)其內(nèi)容的指示而先啟動(dòng)Native Service,再啟動(dòng)Android Service。就完成核心服務(wù)的啟程序了。由Linux內(nèi)核啟動(dòng)用戶(hù)空間的Init進(jìn)程* 解析腳本文件:Init.rcInit.rc是Android的初始化腳本由Init進(jìn)程創(chuàng)建ServiceManager和Zygote進(jìn)程。 由Zygote創(chuàng)建(VM和)SystemServer進(jìn)程。 核

6、心服務(wù)通常在特定的進(jìn)程里執(zhí)行。 必須提供IBinder接口,讓App進(jìn)行跨進(jìn)程的綁定(Bind)和呼叫。 因?yàn)楣蚕恚员仨毚_保多線裎安全(Thread-safe) 以C+類(lèi)別或Java類(lèi)別定義,誕生其對(duì)象, 請(qǐng)ServiceManager(簡(jiǎn)稱(chēng)SM)將該對(duì)象參考值加入到Binder Driver里。核心服務(wù)的特性 App可請(qǐng)SM協(xié)助而遠(yuǎn)距綁定某核心服務(wù), 此時(shí)SM會(huì)傳IBinder接口給App。 App可透過(guò)IBinder:transact()函數(shù)來(lái)與核心服務(wù)互息。 核心服務(wù)啟動(dòng)在先,應(yīng)用程序啟動(dòng)在后。 核心服務(wù)能以C+撰寫(xiě);也可以用Java撰寫(xiě)(如AudioService)。 核心服務(wù)與A

7、pp服務(wù)不同,App服務(wù)不會(huì)加入到Binder Driver里。基於軟硬整合觀點(diǎn)5、簡(jiǎn)介幾個(gè)Android Service 在Android Service里,常見(jiàn)的有如ActivityManager、LocationManager等。茲針對(duì)其中的幾個(gè)常見(jiàn)服務(wù)介紹如下: Activity Manager(活動(dòng)管理器):提供所有的應(yīng)用程序的生命周期,以及Activity之間的互動(dòng)之服務(wù)。 WindowManager(窗口管理器): 提供由關(guān)頻幕窗口之管理服務(wù)。 ResourceManager(資源管理器):管理程序使用的各項(xiàng)資源,例如:字符串、圖片、UI布局(Layout)定義檔。 Locati

8、onManager(位置管理器):提供位置服務(wù)(Location-based Service)。 TelephonyManager(電話管理器):提供有關(guān)手機(jī)通話的服務(wù),例如關(guān)閉電話等。 其它服務(wù)?;盾浻舱嫌^點(diǎn)6、簡(jiǎn)介幾個(gè)Native ServiceNative Service是以C+語(yǔ)言所撰寫(xiě)的核心服務(wù)。 在Native Service里,大家比較熟悉得有如ServiceManager、MediaPlayerService、Zygote、CameraService等等。 茲針對(duì)其中的幾個(gè)常見(jiàn)服務(wù)介紹如下: ServiceManager(服務(wù)管理器): 協(xié)助登錄與綁定系統(tǒng)服務(wù)。 Servi

9、ceManager是Android平臺(tái)里的一個(gè)基本模塊。在Android系統(tǒng)啟動(dòng)過(guò)程中,它 使用C/C+撰寫(xiě)Android的NativeService 模塊時(shí),可以透過(guò)defaultServiceManager()函數(shù)來(lái)取得ServiceManager模塊的IServiceManager 接口之指針。例如,在CameraService.cpp 程序里的instantiate()函數(shù),其內(nèi)容如下:/ CameraService.cppvoid CameraService:instantiate() defaultServiceManager()-addService( String16(medi

10、a.camera), new CameraService(); 它使用了defaultServiceManager()函數(shù)來(lái)取得ServiceManager模塊,然后呼叫其IServiceManager接口里的addService()函數(shù)來(lái)將自己對(duì)象(即CameraService類(lèi)別之對(duì)象)傳給ServiceManager模塊,請(qǐng)它登錄到Binder Kernel里,成為一個(gè)可提供遠(yuǎn)距服務(wù)之模塊(即CameraService模塊)。 Zygote服務(wù):Android最內(nèi)層有個(gè)Zygote 服務(wù)。它是Android Java層的孵化器。Zygote就在幕后復(fù)制孵化(Fork)出一個(gè)子進(jìn)程來(lái)給這些Java層的系統(tǒng)服務(wù)或應(yīng)用程序。所以,Android的應(yīng)用程序,以及上述的各項(xiàng)服務(wù),也都是由zygote所繁殖出來(lái)的。Zygote服務(wù)的架構(gòu)位置如下圖:forkFork ServiceLinux Kernel + Drivers + HWRuntimeInit進(jìn)程(讀取init.rc)MediaServerZy

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論