歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android開發教程:Service的遠程調用

Android開發教程:Service的遠程調用

日期:2017/3/1 10:36:41   编辑:Linux編程
在Andorid平台中,各個組件運行在自己的進程中,他們之間是不能相互訪問的,但是在程序之間是不可避免的要傳遞一些對象,在進程之間相互通信。為了實現進程之間的相互通信,Andorid采用了一種輕量級的實現方式RPC(Remote Procedure Call 遠程進程調用)來完成進程之間的通信,並且Android通過接口定義語言(Andorid Interface Definition Language ,AIDL)來生成兩個進程之間相互訪問的代碼,例如,你在Activity裡的代碼需要訪問Service中的一個方法,那麼就可以通過這種方式來實現了。

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

AIDL RPC機制是通過接口來實現的,類似Windows中的COM或者Corba,但他是輕量級的,客戶端和被調用實現之間是通過代理模式實現的,代理類和被代理類實現同一個接口Ibinder接口。

下面是實現Activity訪問Service例子的步驟:

一.創建.aidl文件

AIDL使用簡單的語法來聲明接口,描述其方法以及方法的參數和返回值。這些參數和返回值可以是任何類型,甚至是其他AIDL生成的接口。重要的是必須導入導入除了內建類型(例如:int,boolean等)外的任何其他類型,哪怕是這些類型是在與接口相同的包中。具體的要求如下:

  • JAVA基本數據類型不需要導入
  • String,List,Map和CharSequence不需要導入

使用Eclipse的ADT插件創建一個BookInfo.aidl文件,該文件有4個方法:

setName(String name)設置圖書的書名,setPrice(int price)設置圖書的價格,setPublish(String pname)設置圖書的出版社和String display()顯示圖書的信息.

BookInfo.aidl文件

  1. package com.android.aidl;
  2. //BookInfo接口
  3. interface BookInfo{
  4. void setName(String name);
  5. void setPrice(int price);
  6. void ssetPublish(String pname);
  7. //顯示圖書的信息
  8. String display();
  9. }

創建好BookInfo.aidl文件,系統會自動在gen目錄下生成Java接口文件BookInfo.java

650) this.width=650;">

Copyright © Linux教程網 All Rights Reserved