1. 程式人生 > >android定時任務實現

android定時任務實現

android的系統定時器功能由AlarmManager類提供

AlarmManager提供了兩個介面供使用,分別是單次和迴圈定時功能,如下:AlarmManager提供了兩個介面供使用,分別是單次和迴圈定時功能,如下:

public void set(int type, long triggerAtMillis, PendingIntent operation);
public void setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation);
AlarmManager提供了4中型別定時功能,對應與上面的引數type,分別為

RTC_WAKEUP和RTC:都是使用UTC時間(即System.currentTimeMillis()獲取到的時間)。區別在於RTC_WAKEUP可以喚醒系統,即手機鎖屏休眠時也能夠收到RTC_WAKEUP定時鬧鐘事件;而RTC不具有喚醒功能,鬧鐘到期事件只會在手機下次喚醒後才會發出,存在很大的延時性。

ELAPSED_REALTIME_WAKEUP和ELAPSED_REALTIME:都是使用系統時鐘,即手機從開機開始計算的毫秒數(SystemClock.elapsedRealtime())。喚醒功能同上。

引數triggerAtMillis:下次定時鬧鐘到期時間

引數intervalMillis:迴圈定時鬧鐘的間隔時間

引數PendingIntent operation:定時鬧鐘到期操作,可以發廣播、啟動Activity或Service,廣播用的最多。

如果定時鬧鐘到期操作較為複雜、耗時,需要使用後臺service。防止Broadcast ANR。後臺Service需要將耗時操作放入工作執行緒,並通過UI主執行緒Handler更新UI相關。

此時切忌:RTC_WAKEUP和ELAPSED_REALTIME_WAKEUP所具有的喚醒功能,但該WAKE_lock僅僅在廣播、Activity、Service啟動/傳送期間有效。後臺Service要處理耗時操作,必須主動申請和釋放WakeLock資源,防止耗時操作無疾而終。