Android AlarmManager實現在熄屏休眠時執行任務
阿新 • • 發佈:2018-12-23
考慮到功耗問題,Android系統在熄屏一段時間後進入休眠。
為了執行特定的任務,可以使用WakeLock獲取CPU鎖,但是這種方式有個弊端,CPU無法進入休眠,一旦進入休眠,執行緒就被掛起,無法執行任務。
於是就到了AlarmManager大放異彩的時候了。
// 鬧鐘 Intent intentRepeat = new Intent(context, CoreService.class); PendingIntent sender = PendingIntent.getService(context, 0, intentRepeat, 0); long triggerTime = SystemClock.elapsedRealtime() + 60 * 1000; // 第一次時間 long intervalTime = 5 * 60 * 1000; // ms AlarmManager am = (AlarmManager) context .getSystemService(Context.ALARM_SERVICE); /** * AlarmManager.ELAPSED_REALTIME表示鬧鐘在手機睡眠狀態下不可用,該狀態下鬧鐘使用相對時間( * 相對於系統啟動開始),狀態值為3; * * AlarmManager.ELAPSED_REALTIME_WAKEUP表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能, * 該狀態下鬧鐘也使用相對時間,狀態值為2; * * AlarmManager.RTC表示鬧鐘在睡眠狀態下不可用,該狀態下鬧鐘使用絕對時間,即當前系統時間,狀態值為1; * * AlarmManager.RTC_WAKEUP表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘使用絕對時間,狀態值為0; */ am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime, intervalTime, sender);
設定成10分鐘,實際測試結果如下:
14:21
14:29
14:39
14:53
14:57
15:08
可以看到間隔並不是精確的10分鐘。
後面測試一下AlarmManager.RTC_WAKEUP的實際執行效果。