經過前幾篇文章,咱們對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); } };