1. 程式人生 > >android ipc通訊基礎疑問點二

android ipc通訊基礎疑問點二

三。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是否死亡。