AIDL

使用AIDL设计远程接口(Designing a Remote Interface Using AIDL)

由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间,所以要想对话,需要将对象分解成操作系统可以理解的基本单元,并且有序的通过进程边界。

通过代码来实现这个数据传输过程是冗长乏味的,Android提供了AIDL工具来处理这项工作。

AIDL (Android Interface Definition Language)是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。

AIDL IPC机制是面向接口的,像COM或Corba一样,但是更加轻量级。它是使用代理类在客户端和实现端传递数据。

使用AIDL步骤:

1.首先编写AIDL接口文件,其实就是一个java接口只不过把后缀名改为.aidl。

复制代码
 1 --forActivity.aidl--
 2 package  com.example.aidl;
 3 interface  forActivity{
 4     void performAction();
 5     void logStartService();
 6     void logCloseService();
 7 }
 8 
 9 --forService.aidl--
10 package com.example.aidl;
11 import com.example.aidl.forActivity;
12 interface forService{
13     void registerTestCall(forActivity cb);
14     void invokCallBack();
15 }
复制代码

2.生成.aidl文件对应的java文件

  • 如果使用Eclipse编写.aidl文件,Eclipse集成的ADT工具会自动帮我们生成.java文件存放在gen文件夹下

  

  • 如果使用aidl.exe命令生成.java文件,则通过android-sdk-windows/platform-tools/aidl.exe   

   -I: search path for import statements. --包的根目录

   -d: generate dependency file. --生成奴属文件路径,即将forService.aidl中依赖的.aidl文件路径输入到aidl_dependency.txt文件中。在编译IRemoteService.aidl时,通过使用"-d"可以将其依赖的相关类输出到自定义的文件中.

D:\workspace\2013_11_12_AIDL\src\com\example\aidl\forService.java: \
  D:\workspace\2013_11_12_AIDL\src\com\example\aidl\forService.aidl \
  D:\workspace\2013_11_12_AIDL\src\com\example\aidl\forActivity.aidl 

   注意:-I与D:\workspace\***之间是没有空格的,-d后面也没有空格。

3.根据生成的java文件,就可以在我们的Activity中通过使用Stub来访问远端的Service进程,实现跨进程通信。(具体实现看下面的例子)

 

参考:http://android.blog.51cto.com/268543/537684

   http://www.cnblogs.com/over140/archive/2011/03/08/1976890.html

   http://blog.csdn.net/saintswordsman/article/details/5130947

   http://blog.csdn.net/sodino/article/details/6419498

Demo下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值