Binder主要用在Service中 包括AIDL和Messenger
- 首先他实现了IBinder接口
- 从FrameWork角度来说Binder 是ServiceManager连接各种Manager(ActivityManager.WindowManager)和相应ManagerService的桥梁
- 从Android应用层来说 Binder是客户端和服务端进行通信的媒介
Binder两个重要的方法
linkToDeath 和unlinkToDeath
也就是常说的死亡代理 当Binder死亡时 我们就会收到通知 这个时候我们就可以重新发起连接请求从而恢复连接
//需要声明一个DeathRecipient对象
private IBinder.DeathRecipient mDeathRecipient=new IBinder.DeathRecipient(){
//死亡的会后回调此方法
@Override
public void binderDied() {
if (mBookManager==null)
return;
mBookManager.asBinder().unlinkToDeath(mDeathRecipient,0);
mBookManager=null;
// 此处重新绑定远程的Service
}
};
客户端绑定远程服务后,给Binder设置一个远程代理
mService=ImessageBoxManager.Stub.asInterface(binder);
binder.linkToDeath(mDeathRecipient,0);