zoukankan      html  css  js  c++  java
  • Binder的非正常消亡时的重置方法

    一、原理

    当Binder非正常消亡的时候,会导致远程调用失败,这样客户端功能就会受到影响。

    解决:给Binder设置一个死亡代理,当Binder死亡时,我们就会收到通知,这个时候可以重新发起连接。

    二、制作

    1、前期准备

    客户端:MainActivity.java

      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            createService();
        }
        /*连接Service端,获取mIBookManger*/
        private void createService(){
            ServiceConnection connection = new ServiceConnection() {
                @Override
                public void onServiceConnected(ComponentName name, IBinder service) {
                    //初始化mIBookManger
                    mIBookManager = IBookManager.Stub.asInterface(service);
                }
    
                @Override
                public void onServiceDisconnected(ComponentName name) {
    
                }
            };
            Intent intent = new Intent(this,BookService.class);
            bindService(intent,connection,BIND_AUTO_CREATE);
        }
    View Code

    Service端:BookService.java

    2、使用

    创建IBinder.DeathRecipient接口,重写其中的binderDied(),当Binder死亡时候,回调该方法。

      private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
            @Override
            public void binderDied() {
                if (mIBookManager != null){
                    //解除绑定当前接口
                    mIBookManager.asBinder().unlinkToDeath(mDeathRecipient,0);
                }
                mIBookManager = null;
    
                createService();
            }
        };

    当然解除绑定,之前还需要绑定接口

     /*连接Service端,获取mIBookManger*/
        private void createService(){
            ...(连接之前的代码)
            try {
                //绑定接口,等待回调
                mIBookManager.asBinder().linkToDeath(mDeathRecipient,0);
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }        
  • 相关阅读:
    机器视觉-halcon学习笔记1
    c#桌面窗体软件【学习笔记】
    Csharp学习笔记 重载
    unity学习笔记——第一人称
    Csharp学习笔记_kita (第二天)namespace
    try ,catch ,finally执行流程
    开发之统一异常处理
    git开发日常使用总结
    mysql5.7绿色版配置以及找不到 mysql服务问题解决
    正则表达式,将数据库字段转换为驼峰式
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5382851.html
Copyright © 2011-2022 走看看