Timer的原理:周期性执行,如果定为每天10点执行,改变手机时间,会不会导致执行时间提前或者推迟? 执行一次,如果定为明天10点,我现在修改日期到明天的9:58,那是否会过2分钟就会执行?
如果使用Timer进行周期性执行,并将其设置为每天10点执行,改变手机时间会影响Timer的执行时间。
改变手机时间导致执行时间提前或推迟:
当您将手机时间向前调整(比当前时间更靠近10点),Timer会立即触发任务执行,因为它会认为定时时间已经到达。同样地,当您将手机时间向后调整(比当前时间更远离10点),Timer会延迟执行,因为它会等待系统时钟达到10点才会触发执行。
定时任务执行的情况:
如果您将定时器设置为明天10点执行,并且此时当前时间是今天的9:58,那么无论您将手机时间调整到哪个时间点,Timer都不会在过2分钟后立即触发执行。Timer会等待系统时钟达到明天的10点才会执行任务。
Timer是依赖于系统时钟的,在定时任务的执行上,它会根据系统时钟来触发任务。如果您频繁地改变手机时间,可能会导致定时任务的执行时间不稳定。对于需要精确定时的任务,建议使用其他更为准确的定时调度方式,如AlarmManager。
写一个获取服务器时间的接口,使用服务器的时间进行定时处理。
要实现这样的定时,应该使用闹钟(AlarmManager)。而且不管是什么定时,app在运行才会有效,杀掉了就没了,如果是给用户手机用的,就不用想了,如果是在自己终端,有系统权限的,倒是可以。
不知道你这个问题是否已经解决, 如果还没有解决的话: //2 Timer
private void schedule() {
new Timer().schedule(new TimerTask() {
@Override
public void run() {
try {
int b = a;
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, 20000);//延迟执行导致泄漏
// 解决方法:activity onDestroy把timer.cancel掉然后赋空
}
timer 定时应该是精确的。系统AlarmManager 精确闹钟需要权限,普通app不能申请精确闹钟权限。 精确定时官方推荐使用workmanager