什么是Alarm?
Alarm是android提供的用于完成鬧鐘式定時任務(wù)的類夜焦,系統(tǒng)通過AlarmManager來管理所有的Alarm,Alarm支持一次性定時任務(wù)和循環(huán)定時任務(wù)览芳,它的使用方式很簡單激捏,這里不多做介紹,只給出一個簡單的示例:
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), Service.class);
PendingIntent pendIntent = PendingIntent.getActivity(getApplicationContext(),
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 5 * 1000毫秒后啟動服務(wù)煮盼,只發(fā)送一次 ,如果是在服務(wù)中的onStrartCommand中定義則循環(huán)
int triggerAtTime = SystemClock.elapsedRealtime() + 5 * 1000;
alarmMgr.set(AlarmManager.ELAPSED_REALTIME, triggerAtTime, pendIntent);
Alarm由AlarmManager來管理带污,從使用方式來看僵控,AlarmManager很簡單,我們只要得到了AlarmManager的對象鱼冀,就可以調(diào)用set方法來設(shè)定定時任務(wù)了报破,而如何得到AlarmManager對象呢?也很簡單千绪,AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE)充易;
定時任務(wù)不會按時觸發(fā)。Alarm在系統(tǒng)休眠的情況下可以正常工作荸型,并且還可以決定是否喚醒系統(tǒng)盹靴,同時Alarm在自身不啟動的情況下仍能正常收到定時任務(wù)提醒,但是當(dāng)系統(tǒng)重啟或者應(yīng)用被殺死的情況下瑞妇,Alarm定時任務(wù)會被取消稿静。
另外,從Android4.4開始辕狰,Alarm事件默認(rèn)采用非精準(zhǔn)方式改备,即定時任務(wù)可能會有小范圍的提前或延后(系統(tǒng)中有一個batch列表,專門用于存儲所有的alarm蔓倍⌒可是僅僅把a(bǔ)larm加入到batch中還不行,系統(tǒng)還必須提供一個類似于Looper的東西一直去遍歷這個列表偶翅,一旦它發(fā)現(xiàn)有些alarm的時間已經(jīng)到達(dá)就要把它取出來去執(zhí)行默勾。Looper:AlarmThread會一直循環(huán)的跑著,一旦有新的alarm觸發(fā)倒堕,它就會取出一個batch然后逐個發(fā)送PendingIntent)
當(dāng)然我們可以強(qiáng)制采用精準(zhǔn)方式灾测,setExact方法。
——————————————————————————————————————————
引用【1】:http://blog.csdn.net/wh_19910525/article/details/44303039