http://www.cloudchou.com/android/post-458.html
Binder service入门—应用层binder service
1.前言
Binder service入门系列:
- Binder service入门–创建native binder service:
http://www.cloudchou.com/android/post-332.html - Binder service入门—Framework binder service:
http://www.cloudchou.com/android/post-447.html - Binder service入门—框架层、应用层调用native binder service:
http://www.cloudchou.com/android/post-468.html
上一篇介绍了Framework Binder Service,本篇将介绍如何创建应用层的binder service。 实际上在应用层使用binder service时,并没有直接与ServiceManager交互(应用层不能直接使用ServiceManager 类),一般是在Service子类里覆盖onBind方法,返回新创建的Binder实体对象。应用层使用Activity作为binder service的客户端,在Activity里创建ServiceConnecttion对象,并调用bindService方法绑定service,在ServiceConnection的onServiceConnected方法将接收到的IBinder对象转化为接口对象,然后再通过这个接口对象调用binder service的接口方法。
2.程序构成
程序在应用开发环境下编译。
整个工程可以在github上下载: https://github.com/cloudchou/AndroidBinderTest
本示例使用remote service,声明service时,使用了android:process属性。
3.程序源码构成
源代码结构如下所示:
AndroidManifeset.xml:声明用到的activity,service组件
ICloudManager.aidl: binder service接口
CloudService: 创建binder service,并返回给客户端
TestAc: 测试binder service的客户端
实现应用层 binder service的步骤
- 1) 使用aidl定义binder service接口ICloudManager
aidl全称是android interface definition language,用于定义binder service接口,语法与Java的接口非常类似,详情可参考:http://developer.android.com/guide/components/aidl.html
使用eclipse开发时,它会被自动编译成ICloudManager.java,放在gen目录下。生成的ICloudManager.java源码如下所示:
由此可见应用层使用binder service实际上和framework使用binder service是非常类似的,只是在应用层使用binder service时,只需编写aidl,开发工具可帮我们自动编译生成java源码文件,该源文件里包含接口,binder service实体类(抽象类,接口方法还未实现),binder service引用类的源码。
- 2) 实现Service
- 3) 实现Client
- 4) AndroidManifest.xml,声明程序组件Activity和Service
本文介绍如何在Android应用层创建BinderService,包括定义接口、实现Service及客户端等关键步骤。


1万+






