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

正文內(nèi)容

第7章android后臺服務(wù)-閱讀頁

2025-03-19 13:15本頁面
  

【正文】 t e ( ) o n B i n d ( )o n R e b i n d ( )o n U n b i n d ( ) o n D e s t o r y ( ) 停 止 S e r v i c e客 戶 端 與S e r v i c e 交 互 本地服務(wù) ? 服務(wù)綁定 ? SimpleMathServiceDemo是綁定方式使用 Service的示例 ? 在示例中創(chuàng)建了 MathService服務(wù),用來完成簡單的數(shù)學運算,這里的數(shù)學運算僅指加法運算,雖然沒有實際意義,但可以說明如何使用綁定方式調(diào)用 Service中的公有方法 ? 在服務(wù)綁定后,用戶可以點擊“加法運算”,將兩個隨機產(chǎn)生的數(shù)值傳遞給 MathService服務(wù),并從 MathService實例中獲取到加法運算的結(jié)果,然后顯示在屏幕的上方 ? “取消綁定”按鈕可以解除與 MathService的綁定關(guān)系,在取消綁定后,點擊“加法運算”按鈕將無法獲取運算結(jié)果 本地服務(wù) ? 服務(wù)綁定 ? SimpleMathServiceDemo是綁定方式使用 Service的示例 ? SimpleMathServiceDemo的用戶界面如下圖所示 本地服務(wù) ? 服務(wù)綁定 ? SimpleMathServiceDemo是綁定方式使用 Service的示例 ? 在 SimpleMathServiceDemo示例中, 件是 Service的定義文件 ? Activity文件,綁定服務(wù)和取消綁定服務(wù)的代碼在這個文件中 ? 下面是 本地服務(wù) ? 服務(wù)綁定 ? 1 package 。 4 import 。 6 import 。 8 9 public class MathService extends Service{ 10 11 private final IBinder mBinder = new LocalBinder()。 16 } 17 } 18 19 Override 20 public IBinder onBind(Intent intent) { 21 (this, 本地綁定: MathService, 22 ).show()。 24 } 本地服務(wù) ? 服務(wù)綁定 ? 25 26 Override 27 public boolean onUnbind(Intent intent){ 28 (this, 取消本地綁定: MathService, 29 ).show()。 31 } 32 33 34 public long Add(long a, long b){ 35 return a+b。 2 3 import 。 5 import 。 7 import 。 9 import 。 11 import 。 本地服務(wù) ? 服務(wù)綁定 ? 13 14 public class SimpleMathServiceDemoActivity extends Activity { 15 private MathService mathService。 17 TextView labelView。 21 setContentView()。 24 Button bindButton = (Button)findViewById()。 26 Button putButton = (Button)findViewById()。 33 bindService(serviceIntent,mConnection,)。 35 } 36 } 本地服務(wù) ? 服務(wù)綁定 ? 37 })。 44 unbindService(mConnection)。 46 } 47 } 48 })。 55 return。 58 long b = (()*100)。 60 String msg = (a)+ + +(b)+ 本地服務(wù) ? 服務(wù)綁定 ? 61 = +(result)。 63 } 64 })。 71 } 72 本地服務(wù) ? 服務(wù)綁定 ? 73 Override 74 public void onServiceDisconnected(ComponentName name) { 75 mathService = null。 78 } 遠程服務(wù) ? 進程間通信 ? 在 Android系統(tǒng)中,每個應(yī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和遠程服務(wù)的方式實現(xiàn) IPC,使應(yīng)用程序具有更好的獨立性和魯棒性 遠程服務(wù) ? 進程間通信 ? Android系統(tǒng)允許應(yīng)用程序使用 Intent啟動 Activity和Service,同時 Intent可以傳遞數(shù)據(jù),是一種簡單、高效、易于使用的 IPC機制 ? Android系統(tǒng)的另一種 IPC機制就是遠程服務(wù),服務(wù)和調(diào)用者在不同的兩個進程中,調(diào)用過程需要跨越進程才能實現(xiàn) ? 在 Android系統(tǒng)中使用遠程服務(wù),一般按照以下三個步驟實現(xiàn) ? 使用 AIDL語言定義遠程服務(wù)的接口 ? 根據(jù) AIDL語言定義的接口,在具體的 Service類中實現(xiàn)接口中定義的方法和屬性 ? 在需要調(diào)用遠程服務(wù)的組件中,通過相同的 AIDL接口文件,調(diào)用遠程服務(wù) 遠程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 在 Android系統(tǒng)中,進程之間不能直接訪問相互的內(nèi)存控件,因此為了使數(shù)據(jù)能夠在不同進程間傳遞,數(shù)據(jù)必須轉(zhuǎn)換成能夠穿越進程邊界的系統(tǒng)級原語,同時,在數(shù)據(jù)完成進程邊界穿越后,還需要轉(zhuǎn)換回原有的格式 ? AIDL( Android Interface Definition Language)是Android系統(tǒng)自定義的接口描述語言,可以簡化進程間數(shù)據(jù)格式轉(zhuǎn)換和數(shù)據(jù)交換的代碼,通過定義 Service內(nèi)部的公共方法,允許在不同進程間的調(diào)用者和 Service之間相互傳遞數(shù)據(jù) ? AIDL的 IPC機制、 COM和 Corba都是基于接口的輕量級進程通信機制 遠程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? AIDL語言的語法與 Java語言的接口定義非常相似,唯一不同之處在于, AIDL允許定義函數(shù)參數(shù)的傳遞方向 ? AIDL支持三種方向: in、 out和 inout ? 標識為 in的參數(shù)將從調(diào)用者傳遞到遠程服務(wù)中 ? 標識為 out的參數(shù)將從遠程服務(wù)傳遞到調(diào)用者中 ? 標識為 inout的參數(shù)將先從調(diào)用者傳遞到遠程服務(wù)中,再從遠程服務(wù)返回給調(diào)用者 ? 如果不標識參數(shù)的傳遞方向,默認所有函數(shù)的傳遞方向為 in ? 出于性能方面的考慮,不要在參數(shù)中標識不需要的傳遞方向 遠程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 遠程服務(wù)的創(chuàng)建和調(diào)用需要使用 AIDL語言,一般分為以下幾個過程 ? 使用 AIDL語言定義遠程服務(wù)的接口 ? 通過繼承 Service類實現(xiàn)遠程服務(wù) ? 綁定和使用遠程服務(wù) 遠程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 下面以 RemoteMathServiceDemo示例為參考,說明如何創(chuàng)建遠程服務(wù) ? 在這個示例中定義了 MathService服務(wù),可以為遠程調(diào)用者提供加法服務(wù) ? 使用 AIDL語言定義遠程服務(wù)的接口 ? 首先使用 AIDL語言定義 MathService的服務(wù)接口,服務(wù)接口文件的擴展名為 .aidl,使用的包名稱與 Android項目所使用的相同 ? 在 src目錄下的建立 ,代碼如下 1 package 。 4 } 遠程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 從上面的代碼中可以看出, IMathService接口僅包含一個add()方法,傳入的參數(shù)是兩個長型整數(shù),返回值也是長型整數(shù) ? 使用 Eclipse編輯 ,當保存文件后Eclipse的 ADT插件根據(jù) AIDL文件在 gen目錄下生產(chǎn) java接口文件 ? 右圖為 遠程服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 使用 AIDL語言定義遠程服務(wù)的接口 ? ,生成了一個內(nèi)部靜態(tài)抽象類 Stub, Stub繼承了 Binder類,并實現(xiàn) IMathService接口 ? 在 Stub類中,還包含一個重要的靜態(tài)類 Proxy。 2 public interface IMathService extends { 3 /** Localside IPC implementation stub class. */ 4 public static abstract class Stub extends implements { 5 private static final DESCRIPTOR = 。 9 } 10 /** 11 * Cast an IBinder object into an IMathService interface, 本地服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 12 * generating a proxy if needed. 13 */ 14 public static asInterface( obj){ 15 if ((obj==null)) { 16 return null。 19 if (((iin!=null)(iin instanceof ))) { 20 return (()iin)。 23 } 24 public asBinder(){ 25 return this。 32 return true。 37 long _arg0。 39 long _arg1。 41 long _result = (_arg0, _arg1)。 43 (_result)。 本地服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 45 } 46 } 47 return (code, data, reply, flags)。 51 Proxy( remote){ 52 mRemote = remote。 56 } 本地服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 57 public getInterfaceDescriptor(){ 58 return DESCRIPTOR。 62 _reply = ()。 64 try { 65 (DESCRIPTOR)。 67 (b)。 本地服務(wù) ? 服務(wù)創(chuàng)建與調(diào)用 ? 69 ()。 71 } 72 finally { 73
點擊復制文檔內(nèi)容
教學課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1