本文主要是对AIDL的扩展
前言
跨进程通信时,我们通过Binder进行通信,那么有的时候服务端会因为各种原因终止,导致Binder连接断裂。此时客户端在不知情的情况下继续调用服务就会出错。
解决方法
Binder中提供了两个方法linkToDeath和unlinkToDeath。通过前者给我们Binder设置一个死亡代理,当Binder死亡时,那我们就会收到通知,选择重调连接。
具体做法
private IBinder.DeathRecipient mDeathRecipient=new IBinder.DeathRecipient(){
@Override
public void binderDied(){
if(mBookControlle==null)
return;
//第二个标记为,设0即可
mBookController.asBinder.unlinkToDeath(mDeathRecipient,0);
mBookController=null;
//TODO:这里重新绑定服务
}
}
此外,还可以通过Binder.is.BinderAlive判断Binder是否死亡
网友评论