2012-12-23 100 views
0

我有一個服務,我知道已經運行,我的活動如何與它通信,而無需重新啓動服務。android訪問正在運行的服務沒有啓動服務

要詳細說明,我有一個小部件啓動一個服務,點擊一個活動獲取加載,在這種情況下,該服務仍應該運行。

我怎樣做線沿線的東西:

  • 有條件的檢查,如果該服務是活
  • 訪問的服務

基本方法,主要的事情,我不想要做的是在我的活動中運行startService(new Intent(...))。我不想在我的服務中再次運行onStart

理想情況下,我可以在我的服務類中添加一些方法,並在我的活動中調用這些方法,就像調用項目中的任何其他公共方法一樣。

我想在我的服務中啓動一些新線程,如果不需要,我不想創建第二個服務類。

感謝您的洞察力

回答

2

startService()該文檔可能幫助:

請求一個給定的應用服務啓動。 Intent可以包含要啓動的特定服務實現的完整類名,也可以包含通過動作和其他類型服務的其他字段的抽象定義來啓動。如果此服務尚未運行,它將被實例化並啓動(如果需要,將爲其創建一個進程);如果它正在運行,那麼它仍然在運行。

...

返回

如果該服務正在啓動或已在運行,即開始返回的實際服務的組件名稱;否則,如果服務不存在,則返回null。

因此,如果您的服務已在運行,startService()將不會啓動新版本。

+0

太棒了!我當然會測試以確保'onStart()'不會再次被調用,但如果是這樣,我可以傳遞一些意圖標誌來有條件地繞過我的其他代碼 – CQM

+0

我相信'onStartCommand()'會再次被調用。 「我不想在我的服務中再次運行onStart。」您可以使用簡單的布爾值來跟蹤服務是否已經運行。 (例如使用一個字段變量boolean isRunning = false;'onStartCommand()'end'isRunning = true'。如果再次調用onStartCommand(),只需檢查if(isRunning) – Sam

+0

謝謝,我已經開始實施這些更改,我可以選擇將布爾值傳遞給intent extras並檢查捆綁包。也onstartcommand調用onstart btw – CQM