binder 2

Android系统要创建一个service很简单,init 启动 rc 里的 可执行main (main_xxxserver.cpp)就可以了

但是,如果想要service被别的进程调用,就需要实现binder接口,并添加服务给ServiceManager,接受ServiceManager的管理和服务,才能支持client进程的跨进程调用。

要创建这个XXXService需要开发者手写这样几个文件:

1. aidl接口文件: IXXXService.aidl , 这里I表示Interface;aidl文件简要地指明你的服务要暴露什么业务功能接口(e.g. xxxFunc)给client进程

        aidl会生成4个文件:

        IXXXService.cpp

        IXXXService.h  :上面二者给client进程用

        BpXXXService.h

        BnXXXService.h :它给你自己的服务类库用

2.手写XXXService.h 注意前面没有I,XXXService.h 继承BinderService 和 BnXXXService,所以BnXXXService是给类库实现用的;

3.手写XXXService.cpp 注意这里配合2 就是你的XXXService类库,里面实现服务的业务功能

4.main_xxxserver.cpp在可执行main里注册服务

        使用你的XXXService类的XXXService::instantiate();它继承父类BinderService的类instantiate(),最终会调用publish方法进行服务注册,有上面4样东西,再配置好selinux权限你的服务就成功添加到ServiceManager中了。

结果:你的client程序需要引用前面自动生成的IXXXService类库,注意前面有I,再经过如下过程:

        //先获取IServiceManager

        sp<IServiceManager> sm = defaultServiceManager();//你已向其注册你的服务

        sp<IBinder> binder;         

        binder = sm->getService(String16("xxx.like"));//通过服务名称拿到代理对象

        // 转换成IXXXService     

        sp<IXXXService>   xxxService = interface_cast<IXXXService>(binder);

        // 通过代理调用服务端业务功能接口函数

        xxxService->xxxFunc();

总结,client开只认系统生成的带I的IXXXService类,方便系统管理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值