freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第7章android后臺服務-資料下載頁

2025-03-09 13:15本頁面
  

【正文】 vice) { 70 mathService = (()service).getService()。 71 } 72 本地服務 ? 服務綁定 ? 73 Override 74 public void onServiceDisconnected(ComponentName name) { 75 mathService = null。 76 } 77 }。 78 } 遠程服務 ? 進程間通信 ? 在 Android系統(tǒng)中,每個應用程序在各自的進程中運行,而且出于安全原因的考慮,這些進程之間彼此是隔離的,進程之間傳遞數(shù)據(jù)和對象,需要使用 Android支持的進程間通信( InterProcess Communication, IPC)機制 ? 在 Unix/Linux系統(tǒng)中,傳統(tǒng)的 IPC機制包括共享內(nèi)存、管道、消息隊列和 socket等等,這些 IPC機制雖然被廣泛使用,但仍然存在著固有的缺陷,如容易產(chǎn)生錯誤、難于維護等等 ? 在 Android系統(tǒng)中,沒有使用傳統(tǒng)的 IPC機制,而是采用Intent和遠程服務的方式實現(xiàn) IPC,使應用程序具有更好的獨立性和魯棒性 遠程服務 ? 進程間通信 ? Android系統(tǒng)允許應用程序使用 Intent啟動 Activity和Service,同時 Intent可以傳遞數(shù)據(jù),是一種簡單、高效、易于使用的 IPC機制 ? Android系統(tǒng)的另一種 IPC機制就是遠程服務,服務和調(diào)用者在不同的兩個進程中,調(diào)用過程需要跨越進程才能實現(xiàn) ? 在 Android系統(tǒng)中使用遠程服務,一般按照以下三個步驟實現(xiàn) ? 使用 AIDL語言定義遠程服務的接口 ? 根據(jù) AIDL語言定義的接口,在具體的 Service類中實現(xiàn)接口中定義的方法和屬性 ? 在需要調(diào)用遠程服務的組件中,通過相同的 AIDL接口文件,調(diào)用遠程服務 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? 在 Android系統(tǒng)中,進程之間不能直接訪問相互的內(nèi)存控件,因此為了使數(shù)據(jù)能夠在不同進程間傳遞,數(shù)據(jù)必須轉換成能夠穿越進程邊界的系統(tǒng)級原語,同時,在數(shù)據(jù)完成進程邊界穿越后,還需要轉換回原有的格式 ? AIDL( Android Interface Definition Language)是Android系統(tǒng)自定義的接口描述語言,可以簡化進程間數(shù)據(jù)格式轉換和數(shù)據(jù)交換的代碼,通過定義 Service內(nèi)部的公共方法,允許在不同進程間的調(diào)用者和 Service之間相互傳遞數(shù)據(jù) ? AIDL的 IPC機制、 COM和 Corba都是基于接口的輕量級進程通信機制 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? AIDL語言的語法與 Java語言的接口定義非常相似,唯一不同之處在于, AIDL允許定義函數(shù)參數(shù)的傳遞方向 ? AIDL支持三種方向: in、 out和 inout ? 標識為 in的參數(shù)將從調(diào)用者傳遞到遠程服務中 ? 標識為 out的參數(shù)將從遠程服務傳遞到調(diào)用者中 ? 標識為 inout的參數(shù)將先從調(diào)用者傳遞到遠程服務中,再從遠程服務返回給調(diào)用者 ? 如果不標識參數(shù)的傳遞方向,默認所有函數(shù)的傳遞方向為 in ? 出于性能方面的考慮,不要在參數(shù)中標識不需要的傳遞方向 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? 遠程服務的創(chuàng)建和調(diào)用需要使用 AIDL語言,一般分為以下幾個過程 ? 使用 AIDL語言定義遠程服務的接口 ? 通過繼承 Service類實現(xiàn)遠程服務 ? 綁定和使用遠程服務 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? 下面以 RemoteMathServiceDemo示例為參考,說明如何創(chuàng)建遠程服務 ? 在這個示例中定義了 MathService服務,可以為遠程調(diào)用者提供加法服務 ? 使用 AIDL語言定義遠程服務的接口 ? 首先使用 AIDL語言定義 MathService的服務接口,服務接口文件的擴展名為 .aidl,使用的包名稱與 Android項目所使用的相同 ? 在 src目錄下的建立 ,代碼如下 1 package 。 2 interface IMathService { 3 long Add(long a, long b)。 4 } 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? 從上面的代碼中可以看出, IMathService接口僅包含一個add()方法,傳入的參數(shù)是兩個長型整數(shù),返回值也是長型整數(shù) ? 使用 Eclipse編輯 ,當保存文件后Eclipse的 ADT插件根據(jù) AIDL文件在 gen目錄下生產(chǎn) java接口文件 ? 右圖為 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? 使用 AIDL語言定義遠程服務的接口 ? ,生成了一個內(nèi)部靜態(tài)抽象類 Stub, Stub繼承了 Binder類,并實現(xiàn) IMathService接口 ? 在 Stub類中,還包含一個重要的靜態(tài)類 Proxy。可以認為Stub類用來實現(xiàn)本地服務調(diào)用, Proxy類用來實現(xiàn)遠程服務調(diào)用,將 Proxy作為 Stub的內(nèi)部類完全是出于使用方便的目的 遠程服務 ? 服務創(chuàng)建與調(diào)用 ? 使用 AIDL語言定義遠程服務的接口 ? Stub類和 Proxy類關系圖 A I D L 文 件I M a t h S e r v i c e . a i d lA I D L工 具生 成 J a v a 接 口 文 件I M a t h S e r v i c e . j a v a生 成 內(nèi) 部 靜 態(tài) 抽 象 S t u b 類I M a t h S e r v i c e . S t u b生 成 內(nèi) 部 靜 態(tài) P r o x y 類I M a t h S e r v i c e . S t u b . P r o x y遠 程 服 務 對 象使 用 a s l n t e r f a c e ( ) 獲 取遠 程 P r o x y 對 象 的 引 用T r a n s a c t ( )本 地 服 務 對 象S t u b . a s I n t e r f a c e ( ) 用 來 返回 遠 程 服 務 對 象 ( P r o x y )o n T r a n s a c t ( )I M a t h S e r v i c e . S t u bI M a t h S e r v i c e a s I n t e r f a c e ( I B i n d e r o b j )I B i n d e r a s B i n d e r ( )b o o l e a n o n T r a n s a c t ( i n t c o d e , P a r c e l d a t a , P a r c e l r e p l y , i n t f l a g s ) I B i n d e r a s B i n d e r ( )S t r i n g g e t I n t e r f a c e D e s c r i p t o r ( )l o n g A d d ( l o n g a , l o n g b ) I M a t h S e r v i c e . S t u b . P r o x y 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 1 package 。 2 public interface IMathService extends { 3 /** Localside IPC implementation stub class. */ 4 public static abstract class Stub extends implements { 5 private static final DESCRIPTOR = 。 6 /** Construct the stub at attach it to the interface. */ 7 public Stub(){ 8 (this, DESCRIPTOR)。 9 } 10 /** 11 * Cast an IBinder object into an IMathService interface, 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 12 * generating a proxy if needed. 13 */ 14 public static asInterface( obj){ 15 if ((obj==null)) { 16 return null。 17 } 18 iin = () (DESCRIPTOR)。 19 if (((iin!=null)(iin instanceof ))) { 20 return (()iin)。 21 } 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 22 return new (obj)。 23 } 24 public asBinder(){ 25 return this。 26 } 27 public boolean onTransact(int code, data, reply, int flags) throws { 28 switch (code) { 29 case INTERFACE_TRANSACTION: 30 { 31 (DESCRIPTOR)。 32 return true。 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 33 } 34 case TRANSACTION_Add: 35 { 36 (DESCRIPTOR)。 37 long _arg0。 38 _arg0 = ()。 39 long _arg1。 40 _arg1 = ()。 41 long _result = (_arg0, _arg1)。 42 ()。 43 (_result)。 44 return true。 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 45 } 46 } 47 return (code, data, reply, flags)。 48 } 49 private static class Proxy implements { 50 private mRemote。 51 Proxy( remote){ 52 mRemote = remote。 53 } 54 public asBinder(){ 55 return mRemote。 56 } 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 57 public getInterfaceDescriptor(){ 58 return DESCRIPTOR。 59 } 60 public long Add(long a, long b) throws { 61 _data = ()。 62 _reply = ()。 63 long _result。 64 try { 65 (DESCRIPTOR)。 66 (a)。 67 (b)。 68 (, _data, _reply, 0)。 本地服務 ? 服務創(chuàng)建與調(diào)用 ? 69 ()。 70 _result = ()。 71 } 72 finally { 73
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1