2012-03-13 102 views
0

我創建了一個示例本地服務項目,如Android Service文章「擴展活頁夾」類http://developer.android.com/guide/topics/fundamentals/bound-services.html中所述。Android本地服務解除綁定問題

一切工作正常。然而,查詢是

隨着unbind(),服務不會停止。如果是,我需要明確地使用stopSelf(),而不是unbind()做什麼。

我已創建示例項目有三個按鈕 - >啓動,停止和獲取

開始 - >綁定服務

站 - >取消綁定服務

開始 - >到訪問服務的方法。 (隨機數生成方法)

現在訪問:

  1. 開始 - 結合的服務

  2. 獲取 - 獲取接入服務的方法

  3. 站 - 解除綁定服務

在這裏,我除了服務將被解開並銷燬。然而,

第4步:獲取 - 此方法仍然工作,並生成隨機數,而預期是某種異常或可能強制關閉。

(onServiceDisconnected不會被調用:因爲它只會在崩潰的情況下被調用)

+0

[這個問題和答案](http://stackoverflow.com/questions/2176375/android-service-wont-stop)似乎是你在找什麼。 – Fishbreath 2012-03-13 14:26:25

+0

「有了解除綁定(),服務不會停止。」 - 你怎麼確定這個? 「停止」是什麼意思? – CommonsWare 2012-03-13 14:29:44

+0

@CommonsWare:爲了清晰起見,我編輯了我的問題。 – Ravibhushan 2012-03-14 07:10:58

回答

1

對於遠程服務 - 這裏的服務綁定到在另一個進程 - 試圖在調用方法取消綁定後的綁定器代理應導致RemoteException

對於本地服務 - 服務仍在您的進程中 - 嘗試在解除綁定後調用綁定器上的方法可能仍然有效。在這種情況下,活頁夾與您的服務通過onBind()返回的對象完全相同。垃圾收集規則規定,如果你堅持活頁夾,活頁夾不能被垃圾收集。

但是,在解除綁定後調用綁定器上的方法是危險的,而且形式不佳。 服務認爲它被摧毀。如果有任何活頁夾取決於在onDestroy(),中清除的服務,可能會導致崩潰。同樣,你正在泄漏服務的內存,直到你允許活頁夾被垃圾收集。

順便說一句,我希望你的服務比「生成隨機數」更有意義。你不需要爲此提供服務。

+0

感謝您提供寶貴的信息。關於隨機數生成:),如我的查詢中所述;這是一個學習服務的示例項目。 – Ravibhushan 2012-03-14 10:52:22