android端与hal层binder交互时,hal出现crash的解决方法

背景:了解linkToDeath

Binder死亡代理 :我们知道Binder是运行在服务进程,若服务端进程因为某种原因“死亡”,那么Binder对象也将随之而去,因为Binder对象是寄宿在服务端进程中的,这个时候我们的远程调用将会失败,客户端进程的功能也将受到影响。Binder类提供linkToDeath方法在客户端可以设置死亡代理,当服务端的Binder对象“死亡”,客户端可以受到死亡通知,这个时候我们可以重新恢复链接。

demo:

正常注册hal层callback后,调用linkToDeath,如果hal层service crash 重启,会回调serviceDied,此时需要延迟,等服务重新起来后去绑定。

ps: 此回调的线程 处于 子线程。

mMcuService = IMcuEventMonitor.getService();
mMcuService.registerEventCallback(mcuServiceCallback);
mMcuService.linkToDeath(mDeathRecipient, 0);
private IHwBinder.DeathRecipient mDeathRecipient = new IHwBinder.DeathRecipient() {
    @Override
    public void serviceDied(long l) {
        Log.d(TAG, " +++++++++++++++++serviceDied ");
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                try {
                    mMcuService = IMcuEventMonitor.getService();
                    int unre = mMcuService.unregisterEventCallback(mcuServiceCallback);
                    int re = mMcuService.registerEventCallback(mcuServiceCallback);
                    mMcuService.linkToDeath(mDeathRecipient, 0);
                    Log.d(TAG, "+++++++unre =" + unre + " re = " + re);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }
            }
        }, 1000);
    }
};
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值