Android开发-aidl入门讲解

DEMO地址:http://download.csdn.net/detail/u010532761/9383213


AIDL,全名Android Interface definition language,主要用于进程间通讯,是android寄予linux系统设计的自己的进程通讯方式(linux存在进程通讯方式)...闲话不多说,下面看代码:

1、新建个工程,做service提供端(类似于服务端)

1.1 新建个java 接口文件,写几个抽象方法,把里面的public static 全删掉,复制出来,改.java的后缀为.aidl,把java接口文件删了,aidl文件复制进去。

package com.kurt.aidl;
interface KurtAidl {
int getNum(int num);
String getString(String info);
}

如图:

1.2点击运行一下,gen目录下就生成了对应的编译文件。

然后写个service:

public class KurtServer extends Service {
@Override
public IBinder onBind(Intent intent) {
return mybind;
}
public KurtAidl.Stub mybind = new KurtAidl.Stub() {//gen目录中会生成对应aidl的Stub方法,调用这个方法,把aidl中的抽象方法实现,记得抛出RemoteException 
@Override
public int getNum(int num) throws RemoteException {
return num * 2;
}
@Override
public String getString(String str) throws RemoteException {
return str + str;
}
};
}

1.3在IBinder方法中返回这个方法对象

1.4 在清单文件中注册这个service,过滤器中设置个action。

2 开始写一个工程去测试通过aidl与对方app通讯。

2.1把aidl文件连包名一起考过去~build一下,在gen目录生成对应文件

在需要调用的地方 new 一个serviceConnection类

public ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
aidl = KurtAidl.Stub.asInterface(service);
}};

2.2 通过intent 调用对方service

Intent intent = new Intent();
intent.setAction("com.kurt.cobain");//对方service的action
bindService(intent, conn,Context.BIND_AUTO_CREATE);

2.3 调用service中的方法:

try {
int a = aidl.getNum(10);
String str = aidl.getString("Kurt-");
Toast.makeText(MainActivity.this, str + a,Toast.LENGTH_LONG).show();
} catch (RemoteException e) {
e.printStackTrace();
Log.e("NIRVANA", "ERROR");
}

这里有一个需要注意的地方,不要在同一个方法中同时执行bindservice 和 调用对方service中的方法,可能会报aidl空指针。因为链接是需要时间的,虽然几乎也是瞬间完成,但是很可能执行方法抢到连接完成操作之前执行。







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值