1. 程式人生 > >android中的定時任務

android中的定時任務

  • 資料來源 《第一行程式碼》

兩種方法

  • 一個是java的Timer類。一個是android的Alarm機制。
    Timer類有一個缺陷,不適用長期在後臺執行的定時任務。因為,android手機在長時間不操作的情況下,CPU會進入休眠,這樣導致Timer的定時任務無法正常執行。
    Alarm則具有喚醒CPU的功能,可以保證大多數情況下,需要執行定時任務時,cpu都能正常工作。
    注意一點:喚醒CPU和喚醒螢幕不是一回事。

AlarmManager的4種工作型別:

  • public static final int ELAPSED_REALTIME = 3;
    讓定時任務的觸發時間從系統開機時間算起,但不會喚醒cpu
  • public static final int ELAPSED_REALTIME_WAKEUP = 2;
    讓定時任務的觸發時間從系統開機時間算起,會喚醒cpu
  • public static final int RTC = 1;
    讓定時任務的觸發時間從1970年1月1日0點算起,不會喚醒cpu
  • public static final int RTC_WAKEUP = 0;
    讓定時任務的觸發時間從1970年1月1日0點算起,會喚醒cpu

系統獲取時間的方法有兩個:

  • SystemClock.elapsedRealtime()
    獲取到系統開機至今所經歷時間的毫秒數

  • System.currentTimeMillis()


    獲取到1970年1月1日0點至今所經歷時間的毫秒數

注意:

4.4以後Alarm任務觸發時間將變的不精確,有可能延遲一段時間後任務才能得到執行。這是系統在耗電方面進行的優化。系統會自動檢測目前有多少個Alarm任務存在。然後將觸發時間相近的幾個任務放在一起執行,這就可以大幅度減少cpu被喚醒的次數,從而有效延長電池的使用時間。
如果要保證精確,使用setExact()方法。

m.set(int type, long triggerAtMillis, PendingIntent operation);

m.setExact(int type, long triggerAtMillis, PendingIntent operation);