我们的应用程序有一项服务,启动计时器每4小时安排一项任务 但是当屏幕关闭时,手机通常会进入睡眠状态 我不希望在手机睡觉时运行任务 但我希望如果手机睡眠时间超过4小时,它可以立即运行。
TimerTask task = new TimerTask()
{
@Override
public void run() {
//do something
}
};
new Timer().schedule(task, 0, 4*60*60*1000);//period=4 hours;
我做了一些测试,显示当时手机已经睡了4个多小时,当它被唤醒时,计时器的时间段没有增加过去的5个睡眠小时,也无法立即执行任务。 />
它的周期时间只计算手机的唤醒时间
我研究过Timer.java,并且知道定时器的延迟机制是使用线程wait(),这就是原因。
如何制作包含手机睡眠时间的循环时间任务?
我认为不需要使用AlarmManager,因为在手机休眠时不需要运行任务
提前谢谢。
答案 0 :(得分:1)
不使用Timer,您需要使用AlarmManager而不设置唤醒选项。如果这样做,下次4小时后唤醒手机时会触发警报..
查看本教程:http://www.techrepublic.com/blog/software-engineer/use-androids-alarmmanager-to-schedule-an-event/