如何解决Android原生框架中使用linkToDeath的最佳实践
我有一个可以有多个客户端的 hidl,所以我想保留一个 DeathHandler 以防任何客户端死亡,这样我就可以进行清理了。
Class MyClientDeathHandler: public android::hardware::hidl_death_recipient {
void serviceDied(uint64_t cookie,const android::wp<::android::hidl::base::V1_0::IBase>& who) override ;
};
关于我的 hidl:
- 它可以有多个客户端。
- 在 1 个客户端内可以有多个会话。
它打开了 1 个 API,用于打开会话。
void open (X,Y,callback cb,int pid /*caller_pid*/) {
// link to death
mDeathHandler = new MyClientDeathHandler();
cb->linkToDeath(mDeathHandler,pid);
}
这里的问题是我最终为每个打开的调用注册了 linkToDeath,所以最终在那里的 1 pid 注册了多个死亡处理程序,因此当客户端被杀死时,我会收到多个通知(100+)。 为了处理这个问题,我需要同步我的 serviceDied 方法。
void MyClientDeathHandler::serviceDied(uint64_t cookie,const android::wp<::android::hidl::base::V1_0::IBase>& who){
// do cleanup
// AutoLock .. // for multiple threads
}
现在的问题是:
- 使用 linkToDeath 的最佳做法是什么?
- 我是否应该只为客户端注册此 linkToDeath 一次,因为它仅特定于 pid。
- 如何检查由多次注册和引导多个回调引起的 binder 框架的开销,以及 如果我想在将其限制为每个 pid 一次后检查性能改进。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。