Android Studio AIDL实现跨进程通信

来源:互联网 发布:php与html的区别 编辑:程序博客网 时间:2024/06/05 09:59

AIDL:Android Interface Definition Language,即Android接口定义语言.

android studio中使用aidl实现跨进程通讯,具体步骤如下:

一:服务端

第一步:通过as创建一个aidl文件,在app右键,如下图:

这里写图片描述

输入自己想要的名字,别的都默认,点击Finish 我这里的名字叫 CalculateAidlInterface创建好如下:

这里写图片描述

再看看 CalculateAidlInterface.aidl 里面怎么写的,其实就一个计算的方法 客户端传2个int类型的值,服务端计算和

这里写图片描述

第二步:CalculateAidlInterface.aidl 编写完成之后 需要Build–>Make Module app,生成相应的java文件,如下图:

这里写图片描述

第三步:接下来,就该完成我们的CalculateAidlService逻辑部分了,CalculateAidlService.java代码如下:

先说下我遇到的坑,我是通过as右键创建的service 他自动会加上下面2个属性 就会导致客户端调用不起来,所以记得一定要删除
android:enabled=”false”
android:exported=”false”

这里写图片描述

再来看下AndroidManifest.xml中CalculateAidlService的配置:action是客户端调用用到的。

这里写图片描述

服务端就已经完成了。接下来我们来看一下客户端的:

二:客户端

第一步:同样需要和服务端一样创建aidl文件,可以把服务器的原封不动的复制过来,包括包名。

这里写图片描述

第二步:再次执行 Build–>Make Module app

再来看下客户端怎么调用的?

第三步:先创建一个ServiceConnection 对象

private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {

    }    @Override    public void onServiceConnected(ComponentName name, IBinder binder) {        //获取远程Service的onBinder方法返回的对象代理        service = CalculateAidlInterface.Stub.asInterface(binder);        if (service != null) {            int calculation = 0;            try {                calculation = service.calculationAddition(1, 2);            } catch (RemoteException e) {                e.printStackTrace();            }            text.setText("我是客户端:calculationResult = " + calculation);        }    }

};

第四步:绑定

这里写图片描述

第五步:调用

这里写图片描述

第六步:不用的时候解除绑定

这里写图片描述

到此代码就全部结束了,简单吧,下面我们来看一下效果如何:

1,服务端的效果

这里写图片描述

2,客户端的效果:

这里写图片描述

原创粉丝点击