一直想玩一下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
完~~~