2013-09-16 87 views
-1

我想做一個正在運行的教練應用程序。對於我所做的一些事情,我需要知道一天何時過去,這意味着日期發生了變化(在24:00)。檢測日期是否發生變化的最有效方法是什麼?

這裏有一些選擇:

  • 我當然可以隨時檢查當前時間是小然後24:00,效率不高。
  • 另外我看到我可以使用意圖過濾器 - ACTION_DATE_CHANGED - 以及一個廣播接收器,它將聽取這個意圖,我會知道日期何時發生變化。 但是我認爲這不是最有效的方式,因爲它總是監聽並可能需要一些電池和CPU。 Android可能在使廣播接收器高效率方面做得很好,但我仍然懷疑它是否適合我的需求。
  • 使用報警管理器?

哪個最好,還是有不同的方法?你有什麼建議?爲什麼?

+1

如果日期與上次使用應用程序的日期不同,您是否需要知道日期發生變化或者需要知道何時運行應用程序? – Prmths

+0

*我是這個論壇的新手*僅供參考,Stack Overflow不是論壇。這是一個問答網站,因此它的工作方式不同。爲了充分利用SO,我建議首先參加[Quick Tour](http://stackoverflow.com/about),另請參閱[Ask]。 – Leigh

+0

通過輪詢,意圖過濾器不起作用。他們向系統註冊,只是通知他們註冊的行爲。所以你不會浪費CPU週期和電池(除非你註冊的操作本身消耗電池 - 比如查看當前位置)。 – f2prateek

回答

2

如果您需要在每次00:00時採取行動,您必須使用AlarmManager和BroadcastReceiver。然後你就可以在接收器的onReceive()方法中做任何你必須做的事情。哦,順便說一下,BroadcastReceivers是最有效的方法,因爲它們只在onReceive()方法期間保持設備活動狀態。

使用AlarmManager設置每天00:00對onReceive的重複呼叫。如果你需要一個例子在評論中告訴我。

除此之外,如果您每天都不必採取任何行動,那麼您可以直接在應用程序內部進行檢查。您可以隨時將您的應用程序最後一次打開到SharedPreferences中。

+0

感謝您的回答,您可以提供一些代碼,瞭解如何執行此操作,以及如何連接AlarmManager和BroadcastReceiver?當應用程序在前臺或後臺運行時,還有機會讓AlarmManager錯過時間更改,意味着在00:00通過/達到時不會通知? –

相關問題