自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何實(shí)現(xiàn)Android接口問題

移動(dòng)開發(fā) Android
在Android操作系統(tǒng)中, 每個(gè)應(yīng)用程序都可以有自己的進(jìn)程, 在寫UI應(yīng)用的時(shí)候, 經(jīng)常要用到Service,下面講述下如何實(shí)現(xiàn)AndRoid接口問題。

 在不同的進(jìn)程中, 如何實(shí)現(xiàn)傳遞對(duì)象呢?  顯然, Java中不允許跨進(jìn)程內(nèi)存共享, 因此傳遞對(duì)象, 只能把對(duì)象拆分成操作系統(tǒng)能理解的簡(jiǎn)單形式,有關(guān)Android接口的問題下文進(jìn)行詳細(xì)說(shuō)明。

以達(dá)到跨界對(duì)象訪問的目的. 在J2EE中,采用RMI的方式, 可以通過(guò)序列化傳遞對(duì)象. 在Android中, 則采用AIDL的方式. 理論上AIDL可以傳遞Bundle,實(shí)際上做起來(lái)卻比較麻煩.AIDL(AndRoid接口描述語(yǔ)言)是一種接口描述語(yǔ)言;

編譯器可以通過(guò)aidl文件生成一段代碼,通過(guò)預(yù)先定義的接口達(dá)到兩個(gè)進(jìn)程內(nèi)部通信進(jìn)程的目的. 如果需要在一個(gè)Activity中, 訪問另一個(gè)Service中的某個(gè)對(duì)象, 需要先將對(duì)象轉(zhuǎn)化成AIDL可識(shí)別的參數(shù)(可能是多個(gè)參數(shù)), 然后使用AIDL來(lái)傳遞這些參數(shù), 在消息的接收端, 使用這些參數(shù)組裝成自己需要的對(duì)象.

AndRoid接口的IPC的機(jī)制和COM或CORBA類似, 是基于接口的,但它是輕量級(jí)的。它使用代理類在客戶端和實(shí)現(xiàn)層間傳遞值. 如果要使用AIDL, 需要完成2件事情: 1. 引入AIDL的相關(guān)類.; 2. 調(diào)用aidl產(chǎn)生的class.

具體實(shí)現(xiàn)步驟如下:

1、創(chuàng)建AIDL文件, 在這個(gè)文件里面定義接口, 該接口定義了可供客戶端訪問的方法和屬性。 如: ITaskBinder.adil

注意: 理論上, 參數(shù)可以傳遞基本數(shù)據(jù)類型和String, 還有就是Bundle的派生類, 不過(guò)在Eclipse中,目前的ADT不支持Bundle做為參數(shù), 據(jù)說(shuō)用Ant編譯可以, 我沒做嘗試.

2、編譯AIDL文件, 用Ant的話, 可能需要手動(dòng), 使用Eclipse plugin的話,可以根據(jù)adil文件自動(dòng)生產(chǎn)java文件并編譯, 不需要人為介入.

3、在Java文件中, 實(shí)現(xiàn)AIDL中定義的接口. 編譯器會(huì)根據(jù)AIDL接口, 產(chǎn)生一個(gè)JAVA接口。這個(gè)接口有一個(gè)名為Stub的內(nèi)部抽象類。它繼承擴(kuò)展了接口并實(shí)現(xiàn)了遠(yuǎn)程調(diào)用需要的幾個(gè)方法。接下來(lái)就需要自己去實(shí)現(xiàn)自定義的幾個(gè)接口了。

  1. package com.cmcc.demo;  
  2.  
  3.    
  4.  
  5. import com.cmcc.demo.ITaskCallback;  
  6.  
  7.    
  8.  
  9. interface ITaskBinder {  
  10.  
  11.       
  12.  
  13.     boolean isTaskRunning();  
  14.  
  15.           
  16.  
  17.     void stopRunningTask();      
  18.  
  19.       
  20.  
  21.     void registerCallback(ITaskCallback cb);      
  22.  
  23.      
  24.  
  25.     void unregisterCallback(ITaskCallback cb);  
  26.  
  27. }  
  28.  
  29. 其中: ITaskCallback在文件ITaskCallback.aidl中定義:  
  30.  
  31. package com.cmcc.demo;  
  32.  
  33.    
  34.  
  35. interface ITaskCallback {  
  36.  
  37.     void actionPerformed(int actionId);  
  38.  
  39. }  
  40.  
  41. 注意: 理論上, 參數(shù)可以傳遞基本數(shù)據(jù)類型和String, 還有就是Bundle的派生類, 不過(guò)在Eclipse中,目前的ADT不支持Bundle做為參數(shù), 據(jù)說(shuō)用Ant編譯可以, 我沒做嘗試.  
  42.  
  43. 2、編譯AIDL文件, 用Ant的話, 可能需要手動(dòng), 使用Eclipse plugin的話,可以根據(jù)adil文件自動(dòng)生產(chǎn)java文件并編譯, 不需要人為介入.   
  44.  
  45. 3、在Java文件中, 實(shí)現(xiàn)AIDL中定義的接口. 編譯器會(huì)根據(jù)AIDL接口, 產(chǎn)生一個(gè)JAVA接口。這個(gè)接口有一個(gè)名為Stub的內(nèi)部抽象類,它繼承擴(kuò)展了接口并實(shí)現(xiàn)了遠(yuǎn)程調(diào)用需要的幾個(gè)方法。接下來(lái)就需要自己去實(shí)現(xiàn)自定義的幾個(gè)接口了.  
  46.  
  47. ITaskBinder.aidl中接口的實(shí)現(xiàn), 在MyService.java中接口以內(nèi)嵌類的方式實(shí)現(xiàn):  
  48.  
  49. private final ITaskBinder.Stub mBinder = new ITaskBinder.Stub() {  
  50.  
  51.         public void stopRunningTask() {  
  52.  
  53.             //@TODO  
  54.  
  55.         }  
  56.  
  57.           
  58.  
  59.         public boolean isTaskRunning() {  
  60.  
  61.             //@TODO  
  62.  
  63.             return false;  
  64.  
  65.         }   
  66.  
  67.           
  68.  
  69.         public void registerCallback(ITaskCallback cb) {  
  70.  
  71.             if (cb != null) mCallbacks.register(cb);  
  72.  
  73.         }  
  74.  
  75.         public void unregisterCallback(ITaskCallback cb) {  
  76.  
  77.             if (cb != null) mCallbacks.unregister(cb);  
  78.  
  79.         }  
  80.  
  81. };  
  82.  
  83. 在MyActivity.java中ITaskCallback.aidl接口實(shí)現(xiàn):  
  84.  
  85. private ITaskCallback mCallback = new ITaskCallback.Stub() {  
  86.  
  87.         public void actionPerformed(int id) {  
  88.  
  89.            //TODO  
  90.  
  91.             printf("callback id=" + id);  
  92.  
  93.         }  
  94.  
  95. }; 

4、向客戶端提供AndRoid接口ITaskBinder, 如果寫的是service,擴(kuò)展該Service并重載onBind ()方法來(lái)返回一個(gè)實(shí)現(xiàn)上述接口的類的實(shí)例。這個(gè)地方返回的mBinder,就是上面通過(guò)內(nèi)嵌了定義的那個(gè). (MyService.java)

【編輯推薦】

  1. 新一代的Android手機(jī)介紹 深度剖析Android SDK版本介紹
  2.  
  3. 谷歌Android手機(jī)能否站穩(wěn)中國(guó)
  4. PythonAndroid深度剖析Android應(yīng)用程序的四種構(gòu)造塊
  5. 探秘與眾不同的Android系統(tǒng)?
責(zé)任編輯:chenqingxiang 來(lái)源: IT168
相關(guān)推薦

2010-03-04 09:46:51

Android Bin

2010-02-06 18:04:21

Android 接口

2024-06-06 08:46:37

2025-03-03 00:00:15

2020-12-08 08:08:51

Java接口數(shù)據(jù)

2017-10-23 10:13:18

IO底層虛擬

2023-04-26 08:20:54

2024-03-21 08:50:33

HTMLURL預(yù)覽應(yīng)用軟件

2010-03-16 17:00:02

Java多線程支持

2015-05-28 11:24:27

Socket調(diào)用套接口問題

2024-12-18 12:10:00

2014-04-01 11:17:16

2024-03-27 08:28:31

元素拖拽API文件上傳

2022-06-04 12:25:10

解密加密過(guò)濾器

2021-03-09 13:18:53

加密解密參數(shù)

2009-07-10 14:26:28

實(shí)現(xiàn)SwingActionListe

2016-08-11 08:24:39

AndroidIntentShareTestDe

2011-04-25 14:45:38

2018-03-16 15:14:08

Android傳輸文件

2024-02-01 09:10:04

頁(yè)面引導(dǎo)工具Vue3
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)