您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
java定时任务Timer、TimerTask、schedule详解及正确的使用方式与解决无法cancel/取消问题
发布时间:2021-08-19 17:35:22编辑:雪饮阅读()
一个定时任务的定义 .Timer) 那么接下来将这个task就可以创建到Timer中了如:
@Override
public void run() {
Message msg=new Message();
msg.obj="videoProcessToSeekBar";
handler.sendMessage(msg);
}
};
video_play_process_timer.schedule(TT,0,1000);
一个任务的停止
大多数认为任务的停止就直接像是这样
video_play_process_timer.cancel();
video_play_process_timer=null;其实这样做法没有什么不对,只不过这样做则停止的是整个Timer所有task。
这里置为null是为了垃圾回收(“可能是当它还处于线程阻塞时你退出了界面,handler还持有引用,依旧会执行,所以在stop还是destory执行一下cancle和null,能保证取消和清除引用,后来能被gc”借群友的话说),同时也可以依据null来判断一个Timer/task是否在运行。
那么其实这样真的就能停止吗?查询相关资料,这样的做法其实好像还真就停止不了。
正确的做法好像是:
TT.cancel();
video_play_process_timer.purge();
video_play_process_timer.cancel();
但是经过测试有时候这样也是无法停止的,那么你就需要判断下是否有重复创建TimerTask。
那么就个人来说我觉得最妥当的停止一个任务应该是这样:
TT.cancel();
TT=null;也就是说我不停止Timer,只停止某个task/任务/TimerTask
关键字词:Timer,java,TimerTask,schedule,cancel