版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第九章 應用程序組件(五)IPC技術1本章目標Android IPC技術概述了解Android組件通訊技術-Binder機制掌握進程間通訊實現(xiàn):Adapter模式Proxy模式使用AIDL簡要陳述Java Service編程組件以及Core Service交互2Android IPC技術Android是基于Linux內核的,各個進程間或任務相對獨立,無法直接進行通訊,需要借助專門技術來完成通訊(主要是數(shù)據(jù)交換)Android IPC(Inter-Process Communication),進程間通信技術如下:標準Linux Kernel IPC接口D-BUS接口Android Binder技
2、術3Binder技術Android Binder是一種在Android里廣泛使用的一種遠程過程調用接口從結構上來說Android Binder系統(tǒng)是一種服務器/客戶機模式,包括Binder Server、Binder Client和Android Binder驅動,實際的數(shù)據(jù)傳輸就是通過Android Binder驅動來完成的4Binder機制實現(xiàn)原理5Binder機制實現(xiàn)原理6具體實現(xiàn)步驟遠程通訊雙方:服務端和客戶端1、服務端實現(xiàn)IBinder接口的對象,將被ServiceManager注冊登記,繼承Service可實現(xiàn)或(getDefaultServiceManager-addServic
3、e)2、客戶端bindSerivce和ServiceConnection組合(或getService) ,得到遠程端IBinder對象3、調用IBinder對象的transact方法,實現(xiàn)兩進程間的Parcel數(shù)據(jù)交換注:ServiceManager與zygote服務都是在init進程啟動過程中被啟動的看示例: Service_Demo1 項目:com.great.service.Service_Demo3Activity、com.great.service.BinderService7組件間通訊實現(xiàn)方案Intent遠程過程調用(RPC)本地調用、遠程執(zhí)行并返回結果(同步)要考慮到線程安全實現(xiàn)
4、模式Adapter適配器模式Proxy/Stub代理模式AIDL實現(xiàn)8Adapter模式9示例:Adapter模式以播放音樂為例Java Service層IPlayer:定義play,stop,getStatus()PlayService.java:實現(xiàn)onBinder方法,返回IBinderPlayAdapter.java:實現(xiàn)IBinder接口即實現(xiàn)onTransact(int code,Parcel data,Parcel reply,int flags)Mp3Player.java:負責實現(xiàn)播放器的功能,可能是調用核心庫服務來實現(xiàn)10示例:Adapter模式(續(xù))Java Activi
5、ty層PlayActivity.java:UI界面,負責啟動和綁定服務,得到mBinder根據(jù)用戶事件,通過mBinder向Service層請求操作11PROXY模式代理模式 代理模式的作用是:為其他對象提供一種代理以控制對這個對象的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。 代理模式一般涉及到三個角色: 抽象角色:聲明真實對象和代理對象的共同接口; 代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能代替真實對象。同時,代理對象可以在執(zhí)行真實對象操作時
6、,附加其他的操作,相當于對真實對象進行封裝。 真實角色:代理角色所代表的真實對象,是我們最終要引用的對象12Proxy/Stub模式一13模式分析編寫服務端和編寫調用端的人都需要熟悉調用協(xié)議定義以及Binder機制即通訊技術(如遠程調用采用SOCKET來實現(xiàn)的話)問題:能否讓編寫服務端和調用端的人在不熟悉遠程調用的通訊技術以及雙方調用協(xié)議的基礎上,就能編寫兩端代碼即只關注業(yè)務實現(xiàn)和調用;而讓通曉通訊技術以及協(xié)議的人來專注實現(xiàn)兩端遠程調用。14Proxy/Stub模式二15示例:Proxy/Stub模式具體實現(xiàn)如下:PlayActivity.java調用方,不關心中間數(shù)據(jù)傳遞綁定服務,獲得IBi
7、nder;調用IPlayer.Stub.asInterface得到代理Proxy對象IPlayer.java專注接口及協(xié)議實現(xiàn)Proxy類IPlayer.Stub抽象類(抽象服務端方法),并實現(xiàn)asInterface方法,返回Proxy對象Mp3Player.java專注服務接口實現(xiàn)服務端:繼承IPlayer.Stub,具體實現(xiàn)接口的抽象方法16IPlayer.java實現(xiàn)(一)public interface IPlayer int OPERATION_PLAY = 1;int OPERATION_STOP = 2;public void start();public void stop()
8、;/服務端或被調用方的抽象類public abstract class Stub extends Binder implements IPlayerpublic abstract void start();public abstract void stop(); public static IPlayer asInterface(IBinder binder)return new Proxy(binder); Overrideprotected boolean onTransact(int code, Parcel data, Parcel reply,int flags) throws Re
9、moteException switch(code)case IPlayer.OPERATION_PLAY:this.start();case IPlayer.OPERATION_STOP:this.stop();return true;17IPlayer實現(xiàn)(二)/代理類實現(xiàn)private static class Proxy implements IPlayerprivate IBinder mBinder;public Proxy(IBinder binder)mBinder = binder;Overridepublic void start() Parcel data = Parce
10、l.obtain();Parcel reply= Parcel.obtain();try mBinder.transact(IPlayer.OPERATION_PLAY, data, reply, 0); catch (RemoteException e) e.printStackTrace();Overridepublic void stop() /IPlayer.Stub類定義結束/IPlayer接口定義結束18Activity實現(xiàn)(調用端)寫服務調用方Private IPlayer proxy;. /構造服務連接對象 mServiceConnection = new ServiceCon
11、nection()Overridepublic void onServiceConnected(ComponentName arg0, IBinder binder) mBinder = binder;proxy = IPlayer.Stub.asInterface(binder);Overridepublic void onServiceDisconnected(ComponentName arg0) ;19Service實現(xiàn)寫服務端方public class MP3Binder extends IPlayer.Stubprivate String tag = MP3Binder ;publ
12、ic void start() Log.i(tag,play.);try Thread.sleep(2000); catch (InterruptedException e) e.printStackTrace();public void stop()Log.i(tag,stop!);20AIDL/代理模式AIDL方法實現(xiàn)遠程通信:編寫接口定義文件Person.aidl、IAIDLService.aidl,以 .aidl 為后綴的文件名不能全大寫使用aidl工具,將接口文件轉化成IAIDLService.java,內含Stub和Proxy定義(這步是由ADT插件自動生成的 )服務端還要定義一個服務類,實現(xiàn)IAIDLService.Stub內的抽象方法客戶端使用IPlayer.Stub.asInterface靜態(tài)方法和SeviceConnection傳遞來的IBinder,獲得接口的代理proxy實現(xiàn)對象
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年岳麓版選修6歷史下冊階段測試試卷含答案
- 2025年華師大版選修2地理下冊階段測試試卷
- 2025年北師大新版選修5歷史上冊階段測試試卷含答案
- 2025年外研版三年級起點選擇性必修3歷史上冊月考試卷含答案
- 2025年浙教版選修6歷史下冊月考試卷
- 二零二五版面料行業(yè)標準制定與采購合同范本3篇
- 二零二五年度生物制藥項目與派遣公司研發(fā)人員派遣合同4篇
- 二零二五版派遣人力資源管理顧問人才派遣與咨詢合同4篇
- 二零二五版商業(yè)綜合體租賃合同范本4篇
- 二零二五年度個人汽車租賃貸款合同范本3篇
- 南安市第三次全國文物普查不可移動文物-各鄉(xiāng)鎮(zhèn)、街道分布情況登記清單(表五)
- 選煤廠安全知識培訓課件
- 項目前期選址分析報告
- 急性肺栓塞搶救流程
- 《統(tǒng)計學-基于Python》 課件全套 第1-11章 數(shù)據(jù)與Python語言-時間序列分析和預測
- 《形象價值百萬》課件
- 紅色文化教育國內外研究現(xiàn)狀范文十
- 中醫(yī)基礎理論-肝
- 小學外來人員出入校門登記表
- 《土地利用規(guī)劃學》完整課件
- GB/T 25283-2023礦產資源綜合勘查評價規(guī)范
評論
0/150
提交評論