2011-07-11 100 views
1

我有一種情況,在電源已連接到設備後,必須在N秒後啓動一些非UI操作。該操作也可以由用戶通過UI啓動。延遲操作和BroadcastReceiver

我在的AndroidManifest.xml定義一個BroadcastReceiver來監聽ACTION_POWER_CONNECTED

我有一個服務,在onStartCommand上執行所需操作。我的問題是 - 當廣播觸發行動時,啓動該服務的正確方法是什麼?

我心裏有兩個選擇:

  1. 一次性計時器任務。不過,我認爲這可能是錯誤的,因爲根據文檔,我無法從BroadcastReceiver啓動任何異步任務。

  2. 重新設計服務:在onStartCommand

    • 開始動作,如果動作是由用戶
    • 計時器開始任務觸發,在定時器拍攝做動作 - 在1但裏面的服務同樣的邏輯 - 如果行動是由廣播觸發的。

我傾向於2.將代碼稍微複雜一些,但現在看來,這是唯一正確途徑。

-Lev

回答

1

正確的方法是#2。這是因爲一旦離開onReceive申請程序可能​​會被殺害。而你的TimerTask不會在這種情況下幫助。

作爲一種替代解決方案,使用AlarmManager及其set函數來安排待定服務意圖。這可能是您的案例中最好的解決方案。

+0

謝謝!我會檢查的。 – lstipakov