2013-12-23 107 views
5

假設我們有一個執行IntentService,然後我們從Activity開始它,然後在隊列中添加幾個其他IntentIntentService進行處理。所以現在我們有第一個Intent正在處理,其餘的Intent s在隊列中。現在讓我們想象一下操作系統殺死我們的Application進程,因爲可以理解的原因。問題是:如果操作系統殺死了一個IntentService,該怎麼辦?

  1. 如何重新啓動IntentService

  2. 如何恢復隊列?

嗯,我知道總有一個Service在那裏你可以重寫它的onStartCommand()並告訴Service該怎麼做。但我需要一個IntentService,因爲它的queue模型。

回答

4

IntentService如果工作隊列需要持久化,則不是您想要使用的。如果您將多個Intent發送到IntentService,然後該進程被Android終止,則無法重建隊列。 IntentService只需使用內部HandlerIntent排隊,這些不會在任何地方持續存在。他們只是迷路了。

如果我是你,我會自己實現這個。 IntentService的代碼不是那麼大,您可以查看它並將其用作您自己的模型Service。你會希望將你的隊列寫入數據庫,以便它是持久的。從onStartCommand()返回START_STICKY,這樣Android會自動重新啓動您的Service,如果它由於資源需求而被終止。

+0

謝謝,大衛。第一個問題呢?如果它被殺死,如何重新啓動一個'IntentService'? – Eugene

+0

要重新啓動它,您必須知道它已被殺死。正如我在我的回答中所說的,「IntentService」在這裏不是正確的技術。但是,由於您似乎想要使用它,因此您可以在派生類的構造函數中調用'setIntentRedelivery(true)'。這會導致Android自動重啓IntentService,如果它在處理一個Intent時被殺死的話(例如:如果Android在工作中殺死了這個進程)。 –

+0

不,我將使用您建議的方法,只是想知道IntentService重啓的可能方法。謝謝 – Eugene

相關問題