概述
在使用service中进行AIDL交互时候,如果服务端或者客户端意外停止,会抛出异常android.os.DeadObjectException , 这时候我们就需要双向监听服务端和客户端的异常停止,并重新绑定服务
linkToDeath的使用
linkToDeath 为Binder对象添加死亡代理。
unlinkToDeath 取消死亡代理
客户端
首先我们需要创建一个DeathRecipient对象
private IBinder.DeathRecipient mDeathProxy = new IBinder.DeathRecipient() {
@Override
public void binderDied() {
//监听死亡,重新绑定
Log.d("zkq", "服务端崩溃,需要重新绑定");
mBinder.asBinder().unlinkToDeath(mDeathProxy, 0);
}
};
在service绑定成功以后,给服务绑定死亡代理 ,当服务端异常停止以后,我们会收到binderDied回调,并在这里重新绑定服务
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServi