微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android原生框架中使用linkToDeath的最佳实践

如何解决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. 它可以有多个客户端。
  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 一次后检查性能改进。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。