2012-08-10 29 views
0

我使用具有多個片段的ActionBar選項卡。每個片段包含一個基於我的計時器服務的計時器。當我停止我的第一個計時器(停止計時器服務)時,第二個計時器也停止,我猜這是因爲他們正在運行相同的服務。使用相同服務的多個定時器

是否可以區分是否有其他片段正在使用該服務,或者可能爲每個定時器啓動單個服務?還是有另一種方式呢?

我一直在尋找一段時間的解決方案,現在我有點迷路了。

+0

你是什麼意思「計時器」?你的意思是Java的Timer類還是一些通用的功能,可以充當定時器? – DeeV 2012-08-10 12:20:32

+1

服務只能有一個實例。您無法啓動同一服務的多個實例。定時器是否只在活動使用時需要,或者在後臺需要嗎? – 2012-08-10 12:22:06

+0

@DeeV該服務使用一個廣播服務和一個可運行的消息,通知我的消費者每秒更新ui。通過這種方式,即使手機未被使用(onPause釋放bradcastservice),我也可以讓我的定時器運行。 – aelveborn 2012-08-10 12:28:05

回答

0

未看到您的代碼:撥打方法startService的呼叫將在服務未運行時啓動服務,如果服務已啓動,則呼叫onStartCommand。當定時器啓動時,您可以調用startService並增加一個值(例如代表實時定時器的int值)。當一個定時器需要停止/結束時,你可以在Service(如你所顯示的鏈接)中實現一個BroadcastReceiver來監聽來自其他組件的「關閉」廣播(你可以使用這種模式讓Service知道一個新的定時器已經開始(「開始」廣播))。

在這種BroadcastReceiverService你會遞減現場定時器計數,看看你在0,如果是這樣,則情況下停止Service

上述方法的主要問題是何時可靠地關閉Service即使其他活動被殺死並且沒有重新啓動,因此它們不能廣播所需的計時器關閉意圖(如果其他活動被殺害,並且不是重新啓動服務可能會留下一些註冊的計時器,並且您不希望該服務無限期運行)。要解決這個問題,需要更多關於你的實際代碼的細節。

+0

嗨,謝謝你的回答,我已經像上面說的那樣實現了它。如果我按下後退按鈕,我確實遇到了服務仍在運行的問題。明天我會更新一些代碼。 – aelveborn 2012-08-11 02:31:10

相關問題