//申请hidl_death_recipient的子类
struct CameraPolicyServiceClient:
virtual public hardware::hidl_death_recipient
{
CameraPolicyServiceClient(sp<hardware::camera::device::V1_0::ICameraDevice> &interface);
~CameraPolicyServiceClient();
status_t initialize();
// hidl_death_recipient interface - this locks the parent mInterfaceMutex
virtual void serviceDied(uint64_t cookie, const wp<hidl::base::V1_0::IBase>& who) override;
const sp<hardware::camera::device::V1_0::ICameraDevice> mInterface;
};
//重写它的 serviceDied() 方法。
//实例化一个 hidl_death_recipient 子类对象。
CameraHardwareInterface::CameraPolicyServiceClient::CameraPolicyServiceClient(
sp<hardware::camera::device::V1_0::ICameraDevice> &interface) :
mInterface(interface){
}
void CameraHardwareInterface::CameraPolicyServiceClient::serviceDied(uint64_t cookie,
const wp<hidl::base::V1_0::IBase>& who) {
(void) who;
//... do something,cookie可以自定义,只要和linkToDeath保持一致就行
ALOGW("%s: Unexpected serviceDied cookie %" PRIu64 "" ,__FUNCTION__, cookie);
}
status_t CameraHardwareInterface::CameraPolicyServiceClient::initialize() {
//调用服务的方法 linkToDeath() 给监视器,传入 IDeathRecipient 的接口对象。
hardware::Return<bool> linked = mInterface->linkToDeath(this,0);
ALOGE(" CameraPolicyServiceClient::initialize");
if (!linked.isOk()) {
ALOGE("%s: Transaction error in linking to ",__FUNCTION__);
} else if (!linked) {
ALOGE("%s: Unable to linkToDeath",__FUNCTION__);
}
return OK;
}
CameraHardwareInterface::CameraPolicyServiceClient::~CameraPolicyServiceClient(){
}
google 的介绍: https://source.android.google.cn/devices/architecture/hidl/services