android 权限校验流程,Android多进程之Binder的意外死亡及权限校验

Android多进程系列

通过前几篇文章,我们对Binder的使用和工作流程有了一定的了解,但是还有几个问题休要我们去解决。一个是如果服务端进程意外退出,Binder死亡,那客户端就会请求失败;还有一个就是权限校验问题,就是服务端需要校验一下客户端的身份权限,不能谁都能请求服务端的服务

Binder意外死亡的处理

给Binder设置DeathRecipient监听

在绑定Service服务后的onServiceConnected回调中给Binder注册死亡回调DeathRecipient

private ServiceConnection mConnection = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName componentName, IBinder iBinder) {

Log.e(TAG, "ServiceConnection-->"+ System.currentTimeMillis());

IBookManager bookManager = BookManagerImpl.asInterface(iBinder);

mRemoteBookManager = bookManager;

try {

//注册死亡回调

iBinder.linkToDeath(mDeathRecipient,0);

...

} catch (RemoteException e) {

e.printStackTrace();

}

}

@Override

public void onServiceDisconnected(ComponentName componentName) {

Log.e(TAG, "onServiceDisconnected-->binder died");

}

};

在DeathRecipient中相应的处理,比如重新连接服务端

private IBinder.DeathRecipient mDeathRecipient = new IBinder.DeathRecipient() {

@Override

public void binderDied() {

Log.e(TAG, "mDeathRecipient-->binderDied-->");

if (mRemoteBookManager == null) {

return;

}

mRemoteBookManager.asBinder().unlinkToDeath(mDeathRecipient, 0);

mRemoteBookManager = null;

//Binder死亡,重新绑定服务

Log.e(TAG, "mDeathRecipient-->bindService");

Intent intent = new Intent(MainActivity.this, BookManagerService.class);

bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

}

};

为了测试,我们在服务端添加结束进程的代码