Android的AlarmManager服務

有很多時候我們可能想在應用里加入一些定時觸發的事件功能,這個時候我們可以使用安卓系統的一個服務——AlarmManager來處理,他的使用還算比較簡單明瞭,先用context.getSystemService(Context.ALARM_SERVICE)得到這個Service,然後就可以使用他的一些靜態方法了。主要的有——

public void set (int type, long triggerAtMillis, PendingIntent operation)
這個方法從Android4.4以後默認是設置的非準確時間,也就是會比設置的時間晚那麼一點點觸發,這麼改是爲了節省電量,建議在對時間要求不是極精確的情況都用這個。

這裏type有這麼幾種——

ELAPSED_REALTIME,一般用 SystemClock.elapsedRealtime() 獲得,表示從開機到現在過去了多少毫秒(包括手機睡眠的時間);

RTC,一般用System.currentTimeMillis()獲得,表示的是UTC的時間啦;

還有兩個和他們相對應的——

ELAPSED_REALTIME_WAKEUPRTC_WAKEUP,這兩個和前邊兩個type不同之處在於這兩種類型的鬧鐘任務在睡眠中也會觸發,觸發後會將系統從睡眠中喚醒,而前兩種就不行了,如果前兩種到了點時手機休眠着,那只有等用戶喚醒或其他事件把他喚醒時任務纔會執行。

第二個參數嘛,是說在何時觸發,這個參數與第一個參數有關係。如果type選的是realtime,這裏就要用SystemClock.elapsedRealtime()來作參考時間點,要是用RTC,就用System.currentTimeMillis(),或者是calendar.getTimeInMillis()。

說到這個我想補充個觸發原則,很重要哦!即——如果設定的時間比當前時間早,會立刻觸發。

第三個參數是一個PendingIntent,就是一個將給系統來執行的Intent,一般用PendingIntent.getActivity(....),PendingIntent.getService(....),PendingIntent.getBroadCast(...)生成,系統在執行時會相應PendingIntent類型來執行startActivity,startService,sendBroadcast。要注意的是,如果設置鬧鐘時兩個PendingIntent一樣,則後一個設置會覆蓋前一個設置

知道了這個,剩下的幾個方法就大同小異了。

setExact(int type, long triggerAtMillis, PendingIntent operation)
這個是Android4.4以上用的,當對時間精確要求高時可以用這個。

public void setRepeating (int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)
這個和set不同之處是它首次觸發後會每隔intervalMillis這麼長時間就會重複觸發,直到cancel爲止。

cancel(PendingIntent operation)
這個很直觀,就是把一個已經設定的鬧鐘任務取消掉。

setTime(long millis)、

這個是設定系統時間(UTC)
注意啦,如果你用用這個,必須在manifest裏聲明要權限permission.SET_TIME,不然程序就不鳥你。

還有幾個方法比較不常用且不常見,我就不提啦~



發佈了41 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章