Android的Aidl实践

2016-12-05  本文已影响68人  DDstar

一直想玩一下AIDL,今天抽空搞定了一下,现在来记录下了~

aidl全称Android Interface Definition Language,是安卓跨进程通讯。

本教程基于AndroidStudio开发工具,实现一个简单的Sample。

一般aidl的效果是这样子地:

app-->A充当service的作用,这个app里面运行着一个服务

app>B充当client,调用A里面的service的数据

这边说一下一个东东:

由于只是个简单的Sample,所以好多人会把充当Service的这个app只用一个service,没有Activity,但是Android4.0以后不允许只有service而没有Activity的应用存在,我的设备是Android5.0的,所以需要有一个简单的界面。

好的,现在开始:

1 先创建Service的app

首先创建一个aidl

app-> new-> aidl->aidlfile

创建好一个aidl以后在aidl里面添加两个方法

ok,创建好了以后,bulid一下就会生成aidl对应的Java文件

2 创建service

跟普通的创建service的方法一样,创建一个service,编写onBind方法

首先创建一个类继承IAidl.Stub,这个是Java文件里面自动创建的一个类,是Binder的子类,也实现了aidl的方法,这边我们处理一下

做一下标记,标记是从这个app里面拿过去的

然后写一下onBine方法的返回

这样服务端就配置ok了,当客户端绑定到我们服务端时,会返回mBinder对象,就可以拿到getStringFromRemote返回的值了

3 现在去配置客户端

注意:aidl的客户端跟服务端的aidl要一毛一样,包名也要一致,所以这边有个小技巧

打开服务端的aidl目录,拷贝整个文件夹到客户端去

具体?

那就这样吧:

在main目录下黏贴整个个aidl文件夹

回来就可以了

4 最后,在client里面启动service,获取数据就行了

新建一个serviceConnection,并在onServiceConnection时获取到Aidl实例

在client的oncreat时启动service并绑定,此时就可以再onServiceConnection那边拿到服务端返回的数据

这边注意下启动service的上下文,以setComponent的方式添加service参数。第一个是包,名,第二个是类名,类名就是服务端配置的那个service的name

运行时应该先启动service的app,再启动client的app

完~~~

上一篇下一篇

猜你喜欢

热点阅读