AIDL常用在android服务端与客户端之间的通信中,容易发生客户端或者服务端死亡,无法通知到对端情况,从而造成客户端不知服务端死亡或者服务端不知客户端死亡,还在进行数据回调操作。
1 客户端意外死亡在服务端的监听方式
服务端通过监听服务端设置的AIDL回调,实现死亡代理,服务端在监听到死亡代理时,将已死亡的客户端回调移除。
callback.asBinder().linkToDeath(new IBinder.DeathRecipient() {
@Override
public void binderDied() {
Log.d("binder", "客户端死亡啦~!");
}
}, 0);
2 客户端意外死亡在服务端的监听方式
//死亡接受者
IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() {
@Override
public void binderDied() {
//服务端死亡
if (iMyAidlInterface != null) {
//注销监听和回收资源
iMyAidlInterface.asBinder().unlinkToDeath(this, 0);
iMyAidlInterface = null;
}
}
};
private IMyAidlInterface iMyAidlInterface;
class Myconnect implements ServiceConnection {
//连接的成功的时候回调
@Override
public void onServiceConnect