现在我用采用Handler与timer及TimerTask结合的方法设置很多个定时器,但是出现了一个问题,当我按home键,让程序后台运行的时候,我在修改手机的本地时间,比如现在是09:00,修改为08:00,这个时候定时器就失效了。我是用public void schedule(TimerTask task,long delay,long period)这个函数来启动的。通过网上资料查看后找到原因了:
3个参数的schedule在制定反复执行一个task的计划时,每一次执行这个task的计划执行时间随着前一次的实际执行时间而变,也就是 scheduledExecutionTime(第n+1次)=realExecutionTime(第n次)+periodTime。也就是说如果第n 次执行task时,由于某种原因这次执行时间过长,执行完后的systemCurrentTime>= scheduledExecutionTime(第n+1次),则此时不做时隔等待,立即执行第n+1次task,而接下来的第n+2次task的 scheduledExecutionTime(第n+2次)就随着变成了realExecutionTime(第n+1次)+periodTime。
当系统时间小于realExecutionTime的时候,定时器就不运行,不知道大家有没有遇到过这种情况,恳请各位提供点帮助,感谢!解决给100分。