0

我有一個服務開始綁定類型(如定義here)。它開始無限期地運行,然後一個單獨的應用程序綁定到它:當這個應用程序被銷燬時,它調用unbindServiceonDestroy方法。服務如何檢測到活動已關閉?

服務應檢測到此應用程序已完成。我閱讀了onUnbind方法,當所有客戶端從服務發佈的特定接口斷開連接時調用。但是,我不需要知道所有客戶端何時斷開連接,但是任何斷開連接。可能嗎?

我認爲,關閉(在onDestroy方法內)期間,應用程序可以將消息發送給服務(服用該服務所綁定的事實優勢):後應該調用unbindService方法,如下所示。

// method of the application 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
    service.closed(); // service is defined by IService.aidl 
    unbindService(...); 
} 

這樣的應用程序將發送的最後一條消息給服務(service.closed()方法),然後取消綁定服務。它能正常工作嗎?郵件到達目的地時,service.closed()方法是否會返回?或者由於下一次調用unbindService方法,可能會有郵件未送達的風險?

回答

1

可能嗎?

在解除綁定之前,讓活動調用Binder上的方法以指示它正在斷開連接。

它能正常工作嗎?

它應該。 AIDL調用是同步的,所以unbindService()將不會發生,直到Binder在樣本中調用closed()

+0

太棒了!它工作正常! – enzom83