0

我有一个可以有多个客户端的 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. 它可以有多个客户端。
  2. 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 
   }

现在的问题是:

  1. 使用 linkToDeath 的最佳实践是什么?
  2. 我是否应该只为客户端注册一次这个 linkToDeath,因为它只特定于 pid。
  3. 如何检查由多次注册和导致多次回调引起的 binder 框架的开销,如果我想在将其限制为每个 pid 一次后检查性能改进。
4

0 回答 0