2011-10-26 71 views
0

我有一個應用程序,在頻繁的間隔(每分鐘一次)醒來後臺做一些東西。我將使用AlarmManager安排喚醒。服務體系結構,連續運行與喚醒

我在看一個結構化Service做後臺工作的兩種不同的方式:

  1. 保持服務的前景與setForeground()連續運行。這很有吸引力,因爲應用程序狀態將在喚醒之間保留在內存中。
  2. 使用stopSelf()在完成運行後臺任務後銷燬Service。這將需要在每次喚醒之間保持一些不重要的對象。

每種方法的優缺點是什麼?持久性代價如何?案例2存儲的推薦方法是什麼?

回答

0

我將使用AlarmManager來安排喚醒。

希望如果你選擇#1的話。無論如何,如果您的服務將始終運行,請使用Timer

每種方法的優缺點是什麼?

setForeground()不工作,也沒有很長一段時間。 startForeground()的作品,但它需要一個活躍的Notification

當我考慮切換到AlarmManagerIntentService時,一個一分鐘的輪詢週期就在這個尖端。話雖如此,一分鐘的輪詢週期非常頻繁。我強烈建議您將此用戶配置爲可配置,包括「請勿輪詢,我會通過用戶界面請求更新」選項。

這將需要在每次喚醒之間保持一些非平凡的對象。

你需要在這兩種情況下保持這些對象。例如,當用戶使用任務殺手攻擊您的選項#1服務時,如果您沒有丟失數據,那將會很好。

持久性代價如何?

它並不重要,因爲你需要在這兩種情況下保持這些對象。

對於案例2的存儲推薦方法是什麼?

這是不可能在摘要中回答的。

0

您一定要使用選項2,並在完成後停止服務。如果你保持它運行你將繼續使用系統資源,即電池。做你需要做的,然後停止服務。另外,你每分鐘都在做些什麼?如果你正在做一個完整的設備喚醒(RTC_WAKEUP),你會再次殺死設備的電池。

我希望這聽起來不那麼傲慢,但我曾經聽過一個開發人員說「不要打android,android會贏」。當你不斷地將你的服務設置爲前臺時,你會對抗機器人試圖清理未被使用的資源。你應該擁抱android。儘可能異步地做事情。這是Android的方式:)

+0

感謝您的回覆。記住這是一個很好的引用。 – Michael