android ipc通讯基础疑问点二

    xiaoxiao2021-04-12  31

    三。Binder基础点 1.AIDL文件并不是实现Binder的必需品。如果是我们手写的Binder,那么在服务端只需要创建一个BookManagerImpl的对象并在Service的onBind方法中返回即可。 2.Binder连接断裂(称之Binder死亡)。。Binder运行在服务端进程,如果服务端进程由于某种原因异常终止,就出现Bindr连接断裂,会导致我们的远程调用失败。 Binder中提供了两个配对的方法:linkToDeath和unlinkToDeath,当Binder死亡时,我们收到通知,重新发送连接请求从而恢复连接。 下面是如何给Binder设置死亡代理: DeathRecipient 是一个接口,其内部有一个方法binderDied..当Binder死亡的时候,系统会回调bindDied方法。 private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() { @Override public void binderDied() { Log.d(TAG, “binder died. tname:” + Thread.currentThread().getName()); if (mRemoteBookManager == null) return; mRemoteBookManager.asBinder().unlinkToDeath(mDeathRecipient, 0); mRemoteBookManager = null; // TODO:这里重新绑定远程Service } }; 在客户端绑定远程服务成功后,给binder设置死亡代理 ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { IBookManager bookManager = IBookManager.Stub.asInterface(service); mRemoteBookManager = bookManager; try { mRemoteBookManager.asBinder().linkToDeath(mDeathRecipient, 0); 。isBinderAlive可以判断Binder是否死亡。

    转载请注明原文地址: https://ju.6miu.com/read-667177.html

    最新回复(0)