在做定时任务的时候,有的同学可能能会用到Timer这个定时任务的辅助类, 但是使用它会有潜在的风险,风险如下, (1)时间计算不准确问题 因为Timer是以绝对时间计算定时任务的,会受到系统时间的影响,如果在任务执行期间,更改了系统时间,那么会 导致时间计算不准确问题,导致任务没用按找预定的时间执行。 (2)只能单任务执行 简单讲就是,只能一次执行一个任务,如果前一个任务没有执行完成,后一个任务是无法并行执行的,只能等待前一个任务执行完成 才能执行。也有可能会出现这样的结果,前一个任务执行的时间太长,后几个任务时间短,可能在一个时间段内执行了多个任务,任务又 没有按照我们要执行的时间执行。 (3)非检查异常导致异步任务终止 Timer当在执行的过程中遇到非检查异常的时候,会导致本次任务失败,并且接下来的任务也无法被执行,Timer将会终止执行,这不是 我们要的结果,我们需要一套恢复机制。 Java5以后可以用下面的这个类来替代Time,并且解决了以上三个问题 java.util.concurrent.ScheduledThreadPoolExecutor 那么在Android上呢,可以用 java.util.concurrent.ScheduledThreadPoolExecutor,也可以用Handler机制做, 但是不建议使用Timer