Alarmmanager設定定時任務有延遲的問題

2021-10-04 21:01:09 字數 1071 閱讀 6454

安卓在6.0引入了新的省電機制——doze模式,系統息屏後會把一些廣播啊網路啊什麼的都切斷或者降低頻率,所有我們設的鬧鐘廣播也被延遲了,在android6.0之後,如果想繼續保持alarm在手機處於所謂doze模式時仍然能夠被即時響應,則需要使用alarmmanager新提供的兩個方法setandallowwhileidle()或者setexactandallowwhileidle()

最後**這樣寫:

alarmmanager alarmmgr = (alarmmanager) getsystemservice(context.alarm_service);

intent intent = new intent(action);

if (build.version.sdk_int>=build.version_codes.m)

else if (build.version.sdk_int >= build.version_codes.kitkat)else

如果你是要設定重複的鬧鐘,比如每天七點做乙個什麼任務,之前是用

manager.setrepeating(alarmmanager.rtc_wakeup, calendar.gettimeinmillis(), 24 * 60 * 60 * 1000, sender);
現在應該用

manager.setinexactrepeating(alarmmanager.rtc_wakeup, calendar.gettimeinmillis(), 24 * 60 * 60 * 1000, sender;
如果過是一次性的鬧鐘,之前是

alarmmanager.set(alarmmanager.rtc_wakeup, calendar2.gettimeinmillis(),pendingintent);
現在應該用

alarmmanager.setexact(alarmmanager.rtc_wakeup, calendar2.gettimeinmillis(),pendingintent);

AlarmManager延遲生效

alarmmanager這個類提供對系統鬧鐘服務的訪問介面。你可以為你的應用設定乙個在未來某個時間喚醒的功能。當鬧鐘響起,實際上是系統發出了為這個鬧鐘註冊的廣播,會自動開啟目標應用。註冊的鬧鐘在裝置睡眠的時候仍然會保留,可以選擇性地設定是否喚醒裝置,但是當裝置關機和重啟後,鬧鐘將會被清除。在alar...

AlarmManager使用總結

下面總結以下我在使用alarmmanager碰到的一些問題。由於心跳是週期性任務,所以我想使用setrepeating方法來執行 void setrepeating int type,long triggeratmillis,long intervalmillis,pendingintent ope...

AlarmManager 鬧鐘服務

alarmmanager簡介 在特定的時刻為我們廣播乙個指定的intent,簡單來說就是我們自己定乙個時間,然後到時間時,alarmmanager會為我們廣播乙個我們設定好的intent,比如指向某個activity或者service。獲得alarmmanager例項alarmmanager ala...