[Android] Binder 里的 Service 和 Interface 分别是什么

前言:

在使用 Binder 的时候,会使用到两个常量字符串,一个是 ServiceName ,一个是 InterfaceName,他们格式如下:

  constexpr char kDefaultServiceName[] = "my.remoteXXXservice";

  constexpr char kDefaultInterfaceName[] = "my.remoteXXXservice@1.0";

ServiceName通常不携带 @1.0 这种类似于版本号的东西,InterfaceName会携带。

ServiceName:

ServiceName是用来标识某个服务的,服务的注册/获取是通过IServiceManager来完成的

获取

  sp<IServiceManager> sm = defaultServiceManager();

  sp<IBinder> binder = sm->getService(String16(kDefaultServiceName));

注册

    defaultServiceManager()->addService(

            String16("media.player"), new MediaPlayerService());

InferfaceName:

InterfaceName是用来标识一组接口的,所谓的一组接口就是Bp和Bn里对应的那一组业务enum,一个Service里可以注册N个interface,每个interface还可以有N个版本。

发送

binder->transact(kTxCreateVirtualAudioTrack, data, &reply);

接收

onTransaction(...){

kTxXXX:

   ...

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值