1.AlarmManager的作用與PendingIntent的關系
顧名思義,就是“提醒”,是Android中常用的一種系統級別的提示服務,在特定的時刻為我們廣播一個指定的Intent。簡單的說就是我們設定一個時間,然后在該時間到來時,AlarmManager為我們廣播一個我們設定的Intent,通常我們使用 PendingIntent,PendingIntent可以理解為Intent的封裝包,簡單的說就是在Intent上在加個指定的動作。在使用Intent的時候,我們還需要在執行startActivity、startService或sendBroadcast才能使Intent有用。而PendingIntent的話就是將這個動作包含在內了。
(AlarmManager實際作用不僅僅作為鬧鍾,實際上它是一個全局的計時器,可以在指定時間或指定周期內執行某個組件)
問:不是可以使用Handler的sendMessageDelayed()或者postDelayed()來定時嗎?
當當前應用被關閉的時候,進程就會停止,則Handler的消息也會消亡。但AlarmManger是系統服務,不會消亡。所以是最好定時的方法
2.PendingIntent的作用及使用
Intent與PendingIntent的區別:
Intent 是及時啟動,intent 隨所在的activity 消失而消失。
Pendingintent,一般用在 Notification上,可以理解為延遲執行的intent,PendingIntent是對Intent一個包裝
如何創建PendingIntnet:
利用PendingIntent.getService()的方法
public static PendingIntent getService (Context context, int requestCode, Intent intent, int flags)
getService()包含了Context.startService(Intent)方法
四個參數的意義:
Context context:不用說了
int requestCode:區分PendingIntent的請求代碼
Intent intent:意圖
int flags :一組用來決定如何創建PendingIntent的標識符
flags參數:
FLAG_UPDATE_CURRENT: 最經常使用的是FLAG_UPDATE_CURRENT,如果PendingIntent已經存在,保留它並且只替換它的extra數據。
FLAG_CANCEL_CURRENT:如果PendingIntent已經存在,那么當前的PendingIntent會取消掉,然后產生一個新的PendingIntent。你可用使用它去檢索新的Intent,如果你只是想改變Intent中的額外數據的話。通過取消先前的Intent,可用確保只有最新的實體可用啟動它。如果這一保證不是問題,考慮flag_update_current。
FLAG_NO_CREATE:利用FLAG_NO_CREAT獲取的PendingIntent,若描述的Intent不存在則返回NULL值.
LAG_ONE_SHOT:利用 FLAG_ONE_SHOT獲取的PendingIntent只能使用一次,即使再次利用上面三個方法重新獲取,再使用PendingIntent也將失敗。
上面4個flag中最經常使用的是FLAG_UPDATE_CURRENT,因為描述的Intent有 更新的時候需要用到這個flag去更新你的描述,否則組件在下次事件發生或時間到達的時候extras永遠是第一次Intent的extras。
使用 FLAG_CANCEL_CURRENT也能做到更新extras,只不過是先把前面的extras清除,另外FLAG_CANCEL_CURRENT和 FLAG_UPDATE_CURRENT的區別在於能否新new一個Intent,FLAG_UPDATE_CURRENT能夠新new一個 Intent,而FLAG_CANCEL_CURRENT則不能,只能使用第一次的Intent。
取消PendingIntent:
pend.cancel();
3.AlarmManager的使用 (http://blog.csdn.net/wangxingwu_314/article/details/8060312)
步驟一:創建一個定時器
//獲取AlarmManager: AlarmManager am = (AlarmManager)context.getSystem.Service(Context.ALARM_SERVICE);
步驟二:啟動定時器
//啟動定時器: am.setRepeating(AlarmManager.RTC,System.currentTimeMillis(),延遲時間,pending);
步驟三:取消定時器
//取消定時器: am.cancel(pendingIntent);
//記得釋放pendIntent:
pendingIntent.cancel();
總結:AlarmManager:簡單的說就是設置定時器的開始時間和循環間隔時間,啟動pending。