2012-10-14 106 views
6

我有兩個Intentservice的例子。一個是commonsware書中的下載示例。另一個在http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler。 這兩個例子都顯示服務執行一個有限的任務,並且他們都顯然通過運行到onHandleIntent事件範圍的末尾來銷燬自己。如何保持運行Intent服務

我寫的服務必須有事件和聽取事物。一個是偵聽GPS移動的LocationListener。另一個向REST服務發佈帖子並收聽回覆。我希望它一直運行到一段時間,或者直到它被啓動它的活動告知退出。

如何保持運行?例如,我在哪裏放置了LocationListener的實現? 謝謝,加里

+0

即使我需要一個相同的問題的答案,在我的情況下,我從小部件開始手電筒,但它被殺死。 – user2548816

回答

13

如何保持它的運行?

你不知道。 IntentService被設計用來完成一項工作(或者如果命令恰好快速進入隊列中,則可能排隊幾個),然後關閉。

我寫的服務必須要有事件和傾聽事情。

然後你不應該使用IntentService。根據需要使用常規的Service,並使用自己的後臺線程。

+2

有人可以申請此答案嗎? IntentService是Service的一個子類,那麼爲什麼只有後者被用於(在一個新線程中)進行長時間運行/正在進行的操作? –

+0

@ ban-geoengineering:正如我寫的,「IntentService」是圍繞事務操作設計的,其中工作完成得相當快,然後服務應該關閉。如果你想要的運行時間比這個長,那麼當你自己停止時(或者由客戶端通過stopService()來停止),用你自己的控件創建你自己的'Service'。 – CommonsWare

+0

我明白你說了什麼,但我想知道你從哪裏得到這些信息,這樣我就可以證實這確實如此。 –

-1

您可以通過以下兩種方式實現這一目標,

AlarmManager是Android在-buite類,允許您在執行某些動作特定的時間週期。

TimerTask與AlarmManager具有相同的功能,您可以反覆重複您的代碼的某些操作。

但是AlarmManager在執行中很重要,所以我建議您使用AlarmManager類。

創建一個AlarmManager,獲取GPS座標並定期將其發佈到服務器。

看看這個AlarmManager Example

+0

您的建議都不會阻止IntentService被銷燬。無法在handleIntent方法中等待,無法保持活動狀態。 – bluewhile

+0

@bluewhile我認爲Lucifer基本上爲使用IntentService提供了一個替代方案來完成這個特定的任務。 – AnixPasBesoin

-1

要使服務保持運行,您的服務需要在服務方法onStartCommand()中返回START_STICKY

使用此功能,即使退出活動,服務也會運行。

注意: 如果不是前臺服務,Android仍會在一段時間後(30分鐘到1小時)殺死服務。使用startForeground(notification)使其成爲前景。

好運

+2

這並不能解釋如何無限地運行IntenService。 –

相關問題