1. 程式人生 > >Android AlarmManager實現在熄屏休眠時執行任務

Android AlarmManager實現在熄屏休眠時執行任務

考慮到功耗問題,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的實際執行效果。