前言:
在使用 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:
...
}