栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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);
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号