2012-06-06 63 views
1

我正在開發一個Android應用程序,它運行一系列異步傳感器掃描,例如獲取附近藍牙設備的MAC地址列表,獲取手機(GPS)的當前位置以及錄製音頻樣本週圍的噪音。 每次掃描完成後,我想要一個服務來處理將收集的數據發送到web服務(使用http和REST)。IntentService工作隊列狀態

我面臨的問題是我應該實現自己的自定義服務還是使用IntentServce處理多個請求(使用'startService()'發送的意向)上傳數據,因爲我想100%確定找到的數據最終會發送到Web服務(如果Internet連接可用)。

如果Android決定殺死我的IntnetService或用戶強制殺死它,同時仍然處理它的請求的工作隊列,我會失去掛起的請求隊列嗎?即我是否需要保存工作隊列的狀態(並因此被迫在不使用IntentService的情況下自己實現服務)?

回答

3

如果Android決定殺死我的IntnetService或用戶強制殺死它,同時仍然處理它的請求的工作隊列,我會失去掛起的請求隊列嗎?

如果用戶重新啓動設備,您的隊列將會蒸發。否則,至少在理論上,返回START_REDELIVER_INTENTonStartCommand()(這是IntentService默認IIRC)應該給你沒有處理的任何Intent命令。這就是說,如果你「想100%肯定」的命令進行處理,我建議你創建自己的持久工作隊列(如數據庫表)。更多地使用IntentService作爲處理所有未完成的持久工作隊列事件(如果有的話)的請求。使用BOOT_COMPLETEDBroadcastReceiver來處理重新啓動情況,告訴您的IntentService由於重新啓動而處理任何未完成的命令。

+0

非常感謝這個快速而有用的答案! 我知道我沒有閱讀服務的文檔,因爲我沒有意識到START_REDELIVER_INTENT,並且它正在被IntentService使用。 –