android進(jìn)程間通信_(tái)第1頁
android進(jìn)程間通信_(tái)第2頁
android進(jìn)程間通信_(tái)第3頁
android進(jìn)程間通信_(tái)第4頁
android進(jìn)程間通信_(tái)第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Android的重要IPC -Binder機(jī)制分享人:張銀博目錄uAndroid的IPCuBinder簡(jiǎn)介uBinder的四個(gè)組件和關(guān)系uService Manager實(shí)現(xiàn)機(jī)制uMediaPlayer的binder實(shí)現(xiàn)過程uBinder在應(yīng)用層的接口及分析1Android的IPCLinux IPC:pipe,named pipe,signal,system V IPC(Semaphore、Message Queue、Share Memory),Socket?Android并未采用linux的這些IPC機(jī)制,Android的IPC機(jī)制有哪些?Binder機(jī)制,Messager機(jī)制,AIDL機(jī)制B

2、inder機(jī)制:一種同步同步機(jī)制,直接調(diào)用,依賴底層binder驅(qū)動(dòng)層的實(shí)現(xiàn),高效。Messager機(jī)制:異步機(jī)制,跨進(jìn)程方便AIDL機(jī)制:可以使你的程序?qū)崿F(xiàn)進(jìn)程間通信(IPC),并且在實(shí)現(xiàn)IPC的基礎(chǔ)上允許多線程訪問2Binder簡(jiǎn)介 Binder其實(shí)也不是Android提出來的一套新的進(jìn)程間通信機(jī)制,它是基于OpenBinder來實(shí)現(xiàn)的。OpenBinder最先是由Be Inc.開發(fā)的,接著Palm Inc.也跟著使用?,F(xiàn)在OpenBinder的作者Dianne Hackborn就是在Google工作,負(fù)責(zé)Android平臺(tái)的開發(fā)工作。為什么要用binderl用驅(qū)動(dòng)程序來推進(jìn)進(jìn)程間的通信。

3、l通過共享內(nèi)存來提高性能。l為進(jìn)程請(qǐng)求分配每個(gè)進(jìn)程的線程池。l針對(duì)系統(tǒng)中的對(duì)象引入了引用計(jì)數(shù)和跨進(jìn)程的對(duì)象引用映射。l進(jìn)程間同步調(diào)用。3Binder的四個(gè)組件及關(guān)系 Android系統(tǒng)Binder機(jī)制中的四個(gè)組件Client、Server、Service Manager和Binder驅(qū)動(dòng)程序,這四個(gè)組件的關(guān)系如下圖:3Binder的四個(gè)組件及關(guān)系lClient、Server和Service Manager實(shí)現(xiàn)在用戶空間中,Binder驅(qū)動(dòng)程序?qū)崿F(xiàn)在內(nèi)核空間中l(wèi)Binder驅(qū)動(dòng)程序和Service Manager在Android平臺(tái)中已經(jīng)實(shí)現(xiàn),開發(fā)者只需要在用戶空間實(shí)現(xiàn)自己的Client和Ser

4、verlBinder驅(qū)動(dòng)程序提供設(shè)備文件/dev/binder與用戶空間交互,Client、Server和Service Manager通過open和ioctl文件操作函數(shù)與Binder驅(qū)動(dòng)程序進(jìn)行通信lClient和Server之間的進(jìn)程間通信通過Binder驅(qū)動(dòng)程序間接實(shí)現(xiàn)lService Manager是一個(gè)守護(hù)進(jìn)程,用來管理Server,并向Client提供查詢Server接口的能力4Service Manager實(shí)現(xiàn)機(jī)制 Service Manager組件是整個(gè)Binder機(jī)制的守護(hù)進(jìn)程,用來管理開發(fā)者創(chuàng)建的各種Server,并且向Client提供查詢Server遠(yuǎn)程接口的功能。 4

5、Service Manager實(shí)現(xiàn)機(jī)制 Service Manager在用戶空間的源代碼位于frameworks/base/cmds/servicemanager目錄下,主要是由binder.h、binder.c和service_manager.c三個(gè)文件組成。 Service Manager實(shí)現(xiàn)過程:l打開/dev/binder文件:open(/dev/binder, O_RDWR);l建立128K內(nèi)存映射:mmap(NULL, mapsize, PROT_READ, MAP_PRIVATE, bs-fd, 0);l通知Binder驅(qū)動(dòng)程序它是守護(hù)進(jìn)程:binder_become_conte

6、xt_manager(bs);l進(jìn)入循環(huán)等待請(qǐng)求的到來:binder_loop(bs, svcmgr_handler),不停的去讀Binder設(shè)備,看是否有對(duì)service的請(qǐng)求,如果有的話,就去調(diào)用svcmgr_handler函數(shù)回調(diào)處理請(qǐng)求。4Service Manager實(shí)現(xiàn)機(jī)制Service Manager為Server和Client提供接口:l 對(duì)Server來說,就是調(diào)用IServiceManager:addService這個(gè)接口來和Binder驅(qū)動(dòng)程序交互了,即調(diào)用BpServiceManager:addService 。為Client提供服務(wù)。l對(duì)Client來說,就是調(diào)用IS

7、erviceManager:getService這個(gè)接口來和Binder驅(qū)動(dòng)程序交互了。具體過程上述Server使用Service Manager的方法是一樣5MediaPlayer的binder實(shí)現(xiàn)過程Binder的Server和Client都由用戶實(shí)現(xiàn),這里就由一個(gè)經(jīng)典的MediaPlayer案例對(duì)binder進(jìn)行。首先是MediaPlayerService類,如下圖5MediaPlayer的binder實(shí)現(xiàn)過程MediaService的源碼文件在:frameworkbaseMediaMediaServerMain_mediaserver.cppint main(int argc, cha

8、r* argv) sp proc(ProcessState:self(); sp sm = defaultServiceManager(); LOGI(ServiceManager: %p, sm.get(); AudioFlinger:instantiate(); MediaPlayerService:instantiate(); CameraService:instantiate(); AudioPolicyService:instantiate(); ProcessState:self()-startThreadPool(); IPCThreadState:self()-joinThreadPool(); 5MediaPlayer的binder實(shí)現(xiàn)過程MediaService的源碼文件在:frameworkbaseMediaMediaServerMain_mediaserver.cppint main(int argc, char* argv) sp proc(ProcessState:self(); sp sm = defaultServiceManager(); LOGI(ServiceManager: %p, sm.get(); AudioFlinger:instantiate(); MediaPlayerService:instantiate();

溫馨提示

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

評(píng)論

0/150

提交評(píng)論