成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

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

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

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

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

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

  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的派生類, 不過在Eclipse中,目前的ADT不支持Bundle做為參數(shù), 據(jù)說用Ant編譯可以, 我沒做嘗試.  
  42.  
  43. 2、編譯AIDL文件, 用Ant的話, 可能需要手動, 使用Eclipse plugin的話,可以根據(jù)adil文件自動生產(chǎn)java文件并編譯, 不需要人為介入.   
  44.  
  45. 3、在Java文件中, 實現(xiàn)AIDL中定義的接口. 編譯器會根據(jù)AIDL接口, 產(chǎn)生一個JAVA接口。這個接口有一個名為Stub的內(nèi)部抽象類,它繼承擴展了接口并實現(xiàn)了遠程調(diào)用需要的幾個方法。接下來就需要自己去實現(xiàn)自定義的幾個接口了.  
  46.  
  47. ITaskBinder.aidl中接口的實現(xiàn), 在MyService.java中接口以內(nèi)嵌類的方式實現(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接口實現(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,擴展該Service并重載onBind ()方法來返回一個實現(xiàn)上述接口的類的實例。這個地方返回的mBinder,就是上面通過內(nèi)嵌了定義的那個. (MyService.java)

【編輯推薦】

  1. 新一代的Android手機介紹 深度剖析Android SDK版本介紹
  2.  
  3. 谷歌Android手機能否站穩(wěn)中國
  4. PythonAndroid深度剖析Android應(yīng)用程序的四種構(gòu)造塊
  5. 探秘與眾不同的Android系統(tǒng)?
責(zé)任編輯:chenqingxiang 來源: 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

2017-10-23 10:13:18

IO底層虛擬

2023-04-26 08:20:54

2024-03-21 08:50:33

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

2020-12-08 08:08:51

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

2010-03-16 17:00:02

Java多線程支持

2015-05-28 11:24:27

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

2024-12-18 12:10:00

2024-03-27 08:28:31

元素拖拽API文件上傳

2014-04-01 11:17:16

2021-03-09 13:18:53

加密解密參數(shù)

2022-06-04 12:25:10

解密加密過濾器

2024-02-01 09:10:04

頁面引導(dǎo)工具Vue3

2009-07-10 14:26:28

實現(xiàn)SwingActionListe

2022-06-22 09:41:16

接口異常測試

2011-08-29 09:49:35

LuaAndroid游戲

2014-05-30 09:44:08

Android折紙動畫
點贊
收藏

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

主站蜘蛛池模板: 久久男人天堂 | 一区二区三区四区在线视频 | 日韩福利一区 | 高清一区二区三区 | 亚洲高清视频在线 | 欧美一级全黄 | 欧美久久久久 | 精品国产乱码久久久久久丨区2区 | 国产免费麻豆视频 | 亚洲高清视频在线 | 日韩成人av在线 | 国产又爽又黄的视频 | 久久久99国产精品免费 | 日韩欧美国产精品 | 国产精品视频yy9299一区 | 男人天堂视频在线观看 | 国产精品欧美一区二区三区不卡 | 一区二区三区免费在线观看 | 日韩在线免费看 | 91免费在线视频 | 91九色porny首页最多播放 | 国产在线中文字幕 | 一区二区三区亚洲 | 天堂在线1 | 欧美综合国产精品久久丁香 | 中文字幕第5页 | 成人欧美一区二区三区1314 | 视频三区 | 免费成人在线网站 | av中文字幕在线 | 国产精品1区2区 | 免费视频久久久久 | 九一视频在线观看 | 欧美日韩视频在线第一区 | 久久综合一区 | 日本xx视频免费观看 | 亚洲精品女人久久久 | 国产一区二区三区精品久久久 | 久久精品在线播放 | 91欧美精品成人综合在线观看 | 欧美一区二区久久 |