Android AIDL通信Service死亡监听

AIDL常用在android服务端与客户端之间的通信中,容易发生客户端或者服务端死亡,无法通知到对端情况,从而造成客户端不知服务端死亡或者服务端不知客户端死亡,还在进行数据回调操作。


一、客户端的监听【服务端】意外死亡


//死亡接受者
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 onServiceConnected(ComponentName name, IBinder service) {
		Log.d(TAG, "onServiceConnected() called ");
 
 
		iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);
 
		try {
			//连接死亡监听
			service.linkToDeath(deathRecipient, 0);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
 
 
		//解绑服务
//            unbindService(myconnect);
	}
 
	//断开连接的时候回调
	@Override
	public void onServiceDisconnected(ComponentName name) {
 
		Log.d(TAG, "onServiceDisconnected() called with: name = [" + name + "]");
	}
}


二、服务端监听【客户端】意外死亡

当无需使用死亡代理时亦可通过unlinkToDeath解除死亡代理模式

callback.asBinder().linkToDeath(new IBinder.DeathRecipient() {
    @Override
    public void binderDied() {
        Log.d("binder", "客户端死亡啦~!");
    }
}, 0);
 
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值