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的实际运行效果。

你可能感兴趣的:(Android)