从业务角度分析android binder的使用
来源:互联网 发布:unity3d ai插件 编辑:程序博客网 时间:2024/05/16 17:11
看了很多解析binder的文章,发现都从底层说起。由于涉及的代码太多,容易造成读者一开始思路不清晰。IBinder及派生类BpBinder和BBinder都属于通信层的概念,可先忽略,本文只从应用业务的角度来解析如何提供service和使用service。
1.提供Service
对于Service提供者需实现以下类:IxxxService,BpxxxService,BnxxxService,并对外提供IxxxService接口。
IxxxService类为纯虚类,只定义了Service提供的接口。
BpxxxService类 的定义:class BpxxxService: public BpInterface<IxxxService>。BpxxxService类实现了IxxxService接口,不过并没有实现功能,只是通过binder发送请求给BnxxxService。BpxxxService,BpInterface以Bp开头,表明Bpxxx的类在客户端使用(即Service使用者)。
BnxxxService类的定义:class BnxxxService: public BnInterface<IxxxService>。
BnxxxService类也实现了IxxxService接口,是接口功能真正的提供者,通过binder返回调用结果。
Service提供者需向ServiceManager注册BnxxxService,方法如下:
defaultServiceManager()->addService(String16("服务名称"), new BnxxxService());
BnxxxService,BnInterface以Bn开头,表明Bnxxx的类在服务端使用。
2.使用Service
Service使用者只需使用IxxxService类的接口来调用Service提供的功能。
Service使用者按如下方法获取BpxxxService实例:
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder = sm->getService(String16("服务名称"));
sp<IxxxService> iService = interface_cast<IxxxService>(binder);
interface_cast<IxxxService>(binder)实际返回BpxxxService对象。interface_cast为模板函数,该函数调用IxxxService::asInterface(binder)。IxxxService::asInterface函数new BpxxxService(binder)。
BpxxxService类代码只在cpp文件中,头文件中并没涉及,意图就是对Service使用者隐藏BpxxxService类。Service使用者实际使用的是BpxxxService类,只是通过它的基类指针IxxxService*来调用而已。
可对照MediaPlayerService理解上面的描述:
MediaPlayerService提供者:IMediaPlayerService.h IMediaPlayerService.cpp
MediaPlayerService使用者:IMediaDeathNotifier.h IMediaDeathNotifier.cpp
以上所说的是service的通用方法。当然你可以不遵循这套通用方法,自己通过读写binder设备实现。ServiceManager本身作为service就没有实现BnxxxService。
- 从业务角度分析android binder的使用
- 从源码角度分析Android中的Binder机制的前因后果
- Android Binder机制の代码角度分析
- 从应用程序的角度看Binder
- 从应用程序的角度看Binder
- 从应用程序的角度看Binder (十)
- Android ROM开发(2) 从嵌入式Linux 的角度分析
- 【android】从源码的角度深入分析Scroller
- 从源码的角度分析Android消息处理机制
- 从源码的角度分析Android动画运行原理
- Android属性动画,从源码的角度分析
- 简单从Android源码的角度分析下SharePreference
- 从源码角度分析Spring batch里ItemReader的使用
- 黄牛是怎样抢票的?——从业务分析师角度看买票难问题
- 从源码角度分析Android Context 对象
- 从android源码角度分析touch机制
- Android的binder机制分析
- Android的binder机制分析
- Java 访问权限修饰词(access specifier)
- 文档清单
- JFrame 和 Frame 小小的不同
- zip非暴力破解
- 用ATL建立轻量级的COM对象(六)
- 从业务角度分析android binder的使用
- java中使用队列:java.util.Queue
- 包访问权限
- Android应用开发学习笔记之播放音频
- 客户端button调用服务端button的后台代码
- Test oracle db iops
- math.h
- gvim简明教程
- eclipse部署web项目至本地的tomcat但在webapps中找不到