我有一項服務必須從幾項活動中獲得,每項活動都使用ServiceConnection
。Android:如何判斷綁定服務何時被銷燬?
每個活動在調用服務之前需要檢查服務是否已被使用。所以在服務中我有一個函數(比如getCurrentId()
),它返回服務當前正在執行的細節。 然後在客戶端活動,該服務建立連接:
private MyService mService = null;
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
MyService.MyBinder myBinder = (MyService.MyBinder) binder;
mService = myBinder.getService();
activeId = mService.getCurrentId();
log.i(TAG, "Service bound");
}
public void onServiceDisconnected(ComponentName className) {
log.i(TAG, "Service has been killed");
mService = null;
}
};
中的按鈕切換綁定到服務:
activity.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
和解除綁定:
activity.unbindService(mConnection);
我不是根本不需要撥打startService()
。
之前,我綁定到服務,我檢查它是否已經生效,它在做什麼:
if (mService == null)
activeId = -1;
else
activeId = mService.getCurrentId();
問題是,如果活動結合,然後從服務解除綁定,服務onDestroy()
方法被調用(我登錄它來確認這一點),這很好。 但是這個不是觸發器onServiceDisconnected()
。
所以mService永遠不會設置爲null,並且當我得到該if語句時,它愉快地繼續並調用getCurrentId()
,它返回以前的任何細節。
我收集onServiceDisconnected()
只應該在服務運行的線程意外死亡時被調用,所以當服務被上一次使用unbinding的活動所銷燬時,它不會被調用。
據我所知,該服務沒有被重新使用,我已經記錄了整個服務。
這給了我兩個問題:
是否有其他的回調函數或某種方式,其中一個ServiceConnection被告知其服務已被解除綁定破壞?
如果服務已將銷燬,那我該如何調用它的功能呢?或者是別的什麼事情 - ServiceConnection
或Binder
以某種方式返回值而不實際調用服務?
onServiceDisconnected()也在服務被銷燬時(例如,它完成了它的任務)被調用,同時活動仍然被綁定!這並非罕見。但是,當在onUnbind()之後調用onDestroy()時,不會調用onServiceDisconnected。 – Bhiefer