Android的Aidl实践

一直想玩一下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 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,118评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,156评论 19 139
  • Jianwei's blog 首页 分类 关于 归档 标签 巧用Android多进程,微信,微博等主流App都在用...
    justCode_阅读 5,985评论 1 23
  • Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
    隔壁老李头阅读 10,852评论 13 43
  • 才发现网易云音乐还有「长按屏幕选择歌词导出图片」的功能。一直都很佩服网易的「有态度」和「有情怀」[微笑] ​​​
    文质彬彬0阅读 184评论 0 0