经过前几篇文章,咱们对Binder的使用和工做流程有了必定的了解,可是还有几个问题休要咱们去解决。一个是若是服务端进程意外退出,Binder死亡,那客户端就会请求失败;还有一个就是权限校验问题,就是服务端须要校验一下客户端的身份权限,不能谁都能请求服务端的服务ide
给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"); } };
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); } };