AIDL使用入门
来源:互联网 发布:数据报表怎么做好看 编辑:程序博客网 时间:2024/06/08 12:17
AIDL是什么?
AIDL (Android Interface Definition Language), Android接口定义语言,Android提供的IPC (Inter Process Communication,进程间通信)的一种独特实现。
什么情况下要使用AIDL
使用AIDL只有在你允许来自不同应用的客户端跨进程通信访问你的service,并且想要在你的service种处理多线程的时候才是必要的。 如果你不需要执行不同应用之间的IPC并发,你应该通过实现Binder建立你的接口,或者如果你想执行IPC,但是不需要处理多线程。那么使用Messenger实现你的接口。
定义一个AIDL接口的步骤
必须在一个.aidl文件中使用Java编程语言语法定义你的AIDL接口,然后在提供service的应用中和任何绑定到这个service的应用中的源代码中(在src目录吓)保存它。
当你编译包含.aidl文件的应用时,Android SDK工具基于这个.aidl文件生成一个IBinder接口,并且把它保存到项目的gen目录吓.service必须恰当的实现这个IBinder接口 之后客户端应用可以绑定到这个服务上,然后从IBinder调用方法来执行IPC。
使用AIDL建立一个邻接的service需要遵循下面的步骤:
1. 建立.aidl文件
这个文件使用方法签名定义了语言接口
2.实现这个接口
Android SDk工具基于你的.aidl文件使用java语言生成一个接口 这个接口有一个内部抽象类,叫做Stub,它是继承Binder并且实现你AIDL接口的 你必须继承这个Stub类并且实现这些方法
3.暴露这个接口给客户端
实现一个service并且覆盖onBind()方法返回你的Stub实现类。
你的.aidl文件必须被复制到其他应用程序中来让他们访问你service的接口,你必须维护原始接口的支持(向后兼容)。
用一个实例来分步骤说明
在server项目中建立.aidl文件
AIDL使用一个简单的语法让你声明一个带有一个或者多个带有参数和返回值方法的接口 参数和返回值可以是任何类型,甚至是AIDL生成的接口。
IService.aidl
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
在server项目中建立服务类
当你编译你的应用时,Android SDK工具生成一个.java接口文件用你的.aidl文件命名生成的接口包含一个名字为Stub的子类,这是一个它父类的抽象实现,并且声明了.aidl中所有的方法。
Stub也定义了一些辅助的方法,最显著的就是asInterface(),它是用来接收一个IBinder(通常IBinder传递给客户端的onServiceConnected()回调方法)并且返回一个Stub接口的实例 。
一旦你为service实现了接口,你需要把它暴露给客户端,这样他们才能绑定到上面 为了给你的service暴露接口,继承Service并且实现onBind()方法返回一个你实现生成的Stub类。
AIDLService.java
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
在server项目AndroidManifest中申明Service
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
把server项目中的aidl文件带包拷贝到client项目中(包名要相同)
MainActivity.java
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
运行结果:
文章中AIDL例子代码下载
- AIDL使用入门
- AIDL文件使用入门介绍
- AIDL使用入门, 客户端通过AIDL与服务端通信
- Android的AIDL文件使用入门介绍
- Android AIDL的入门使用教程
- AIDL入门
- AIDL入门
- AIDL 入门
- 使用AIDL
- AIDL使用
- AIDL使用
- AIDL使用
- Androidk开发入门之使用AIDL实现进程通信
- 安卓跨进程通信之AIDL使用入门
- AIDL简单入门
- AIDL简单入门
- AIDL简单入门
- AIDL简单入门
- BZOJ3210: 花神的浇花集会
- 子线程中能不能 new handler?为什么?
- 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup
- (OK) angular2-data-table is a Angular2 component for presenting large and complex data.
- PMP笔记:执行过程组检查事项
- AIDL使用入门
- python中sorted如何使用
- 数据结构和算法------ArrayList的实现
- 测试用例设计技巧
- 编码GBK字符无法自动映射的解放办法
- 使用HttpMessageConverter处理JSON
- 深入理解javascript中的立即执行函数(function(){…})()
- Android 中的动画
- J2SE第四章——异常(一)