美文网首页
Android的Aidl实践

Android的Aidl实践

作者: DDstar | 来源:发表于2016-12-05 18:43 被阅读68次

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

    完~~~

    相关文章

      网友评论

          本文标题:Android的Aidl实践

          本文链接:https://www.haomeiwen.com/subject/kwymjttx.html