android ipc通讯基础疑问点二

来源:互联网 发布:大数据利弊 编辑:程序博客网 时间:2024/06/14 09:05

三。Binder基础点
1.AIDL文件并不是实现Binder的必需品。如果是我们手写的Binder,那么在服务端只需要创建一个BookManagerImpl的对象并在Service的onBind方法中返回即可。
2.Binder连接断裂(称之Binder死亡)。。Binder运行在服务端进程,如果服务端进程由于某种原因异常终止,就出现Bindr连接断裂,会导致我们的远程调用失败。
Binder中提供了两个配对的方法:linkToDeath和unlinkToDeath,当Binder死亡时,我们收到通知,重新发送连接请求从而恢复连接。
下面是如何给Binder设置死亡代理:
DeathRecipient 是一个接口,其内部有一个方法binderDied..当Binder死亡的时候,系统会回调bindDied方法。
private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {
@Override
public void binderDied() {
Log.d(TAG, “binder died. tname:” + Thread.currentThread().getName());
if (mRemoteBookManager == null)
return;
mRemoteBookManager.asBinder().unlinkToDeath(mDeathRecipient, 0);
mRemoteBookManager = null;
// TODO:这里重新绑定远程Service
}
};
在客户端绑定远程服务成功后,给binder设置死亡代理
ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
IBookManager bookManager = IBookManager.Stub.asInterface(service);
mRemoteBookManager = bookManager;
try {
mRemoteBookManager.asBinder().linkToDeath(mDeathRecipient, 0);
。isBinderAlive可以判断Binder是否死亡。

0 0
原创粉丝点击