android定時任務實現
阿新 • • 發佈:2018-12-23
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資源,防止耗時操作無疾而終。