AIDL学习记录

https://developer.android.google.cn/guide/components/aidl

一 实际创建步骤:

1.在服务module上创建一个AIDL文件夹(图一)

图1

2 创建在刚刚创建的文件夹下创建AIDL文件(图二)

图二

3 编写AIDL文件(图三)自定义一个方法。

图三

android studio 需要手动编译aidl文件一下,生成对应的Java 文件。

图四


4 编写服务端service 类(图五)

图五

“Android SDK 工具会生成一个以 .aidl 文件命名的 .java 接口文件。生成的接口包括一个名为 Stub的子类,这个子类是其父接口(例如,YourInterface.Stub)的抽象实现,用于声明 .aidl 文件中的所有方法。如需实现 .aidl 生成的接口,请扩展生成的 Binder 接口(例如,YourInterface.Stub)并实现从 .aidl 文件继承的方法。服务实现该接口后,就需要向客户端公开该接口,以便客户端进行绑定。 要为您的服务公开该接口,请扩展Service并实现onBind(),以返回一个类实例,这个类实现了生成的 Stub。”

----------------做具体的工作需要在service 里边声明一个binder接口,这个接口由创建的aidl文件.Stub 的方法返回。也就是aidl里面的声明的自定义方法由这里真正的去实现。比如这里是传入客户端的两个整数,返回他俩合。

6 编写客户端代码(图六)

这里需要用显示的方式去开启服务端,注意服务端注册的服务的时候:

设置exported为true默认是false,不然无法通过其它进程启动这个service

客户端启动服务端服务的代码:

图六

“当客户端(如 Activity)调用 bindService() 以连接此服务时,客户端的 onServiceConnected() 回调会接收服务的 onBind() 方法返回的 mBinder 实例。当客户端在 onServiceConnected() 回调中收到 IBinder 时,它必须调用xxxx.asInterface(service) 以将返回的参数转换成 xxxx 类型。"(图七)

----------------------用stub.asinterface 方法获取底层的代理,这个代理可以调用服务端的方法,也就是通过这个方法实现了客户端对服务端的操作。比如返回的是IMyAidlInterface,之后九可以通过这个变量进行客户端对服务端的操作了。

图七

"客户端还必须具有对 interface 类的访问权限,因此如果客户端和服务在不同的应用内,则客户端的应用 src/ 目录内必须包含 .aidl 文件(它生成 android.os.Binder 接口 — 为客户端提供对 AIDL 方法的访问权限)的副本。"

-----------------需要在客户端创建一个跟服务端一模一样的aidl包跟aidl文件,拷贝一下就行(图八)


图八


7 客户端调用服务端方法

上边通过创建的ServiceConnection 方法获取了服务端的代理,设置了返回为全局变量。这样就可以使用这个代理去调用的服务端的方法了,例子(图九)


图九

aidl里边声明了这个方法,客户端通过返回的远程代理可以直接调用服务端这个方法,并且还能得到返回值。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,120评论 19 139
  • Android跨进程通信IPC整体内容如下 1、Android跨进程通信IPC之1——Linux基础2、Andro...
    隔壁老李头阅读 13,700评论 13 43
  • 一、IPC简介 (1)IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨...
    遥遥的远方阅读 12,000评论 0 3
  • Jianwei's blog 首页 分类 关于 归档 标签 巧用Android多进程,微信,微博等主流App都在用...
    justCode_阅读 11,204评论 1 23
  • 在日常使用file input时,都会涉及到文件按钮的重置。 重置一个文件域有三种方式 将文件域的value设置为...
    BoosterChen阅读 9,012评论 0 0

友情链接更多精彩内容