首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

Android入门:透过AIDL进行进程间通信

2012-08-08 
Android入门:通过AIDL进行进程间通信一、AIDL介绍AIDL:Android Interface Definition Language,接口定义语

Android入门:通过AIDL进行进程间通信

一、AIDL介绍
AIDL:Android Interface Definition Language,接口定义语言;顾名思义,就是定义接口的语言,即利用AIDL可以定义接口;
AIDL简单地说就是进程间通信的方法,类似于Java中的RMI;
AIDL利用Xxx.aidl文件定义接口,通常将此文件放在com.xiazdong.aidl中;
AIDL文件的编写类似于接口的编写,但有一些不同:
(1)AIDL中的接口和方法前不能加上任何访问权限修饰符(如public、private、static、final);(2)AIDL支持Java基本类型(3)AIDL中的方法参数如果是非Java基本类型,则要加上in、out、inout;(4)AIDL对于自定义类型,则需要实现Parselable接口;
AIDL编写后会在gen目录中自动生成java文件;
在自动生成的文件中我们需要了解的方法有:(1)Xxx xx = Xxx.stub.asInterface(IBinder);//将IBinder类型转换成AIDL类型,在ServiceConnection的onServiceConnected中使用;(2)Xxx.stub.fun();//调用aidl定义的方法

需要注意的是,由于AIDL文件是两应用通信的桥梁,因此此文件在两应用中都要存在;


二、代码案例

场景说明:此场景和“Android入门:绑定本地服务”文章中的应用功能一样,不同的是加法的服务在AIDLService应用,而调用加法的程序在AIDLClient应用中;
效果和以前一样:
Android入门:透过AIDL进行进程间通信


程序组织结构的不同:
Android入门:透过AIDL进行进程间通信


AIDLClient代码

AddOp.aidl

package com.xiazdong.aidlservice;import com.xiazdong.aidl.AddOp;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.os.RemoteException;public class AddOpService extends Service {private IBinder binder = new AddOpBinder();@Overridepublic IBinder onBind(Intent intent) {return binder;}public int add(int a,int b){//服务提供的方法通过Binder对象提供给外部return a+b;}private class AddOpBinder extends AddOp.Stub{//继承aidl生成的存根@Overridepublic int addService(int a, int b) throws RemoteException {//实现此方法return add(a,b);//调用服务的方法}}}










热点排行