好的,所以,我希望一段时间后运行任务并继续运行(如JS' setInterval()
函数,TimerTask
有一个名为scheduleAtFixedRate
的方法,基本上做同样的事情。但是,pause
或resume
和TimerTask.
没有明确的机制
我在SO上读到,一旦取消Timer
,它就会变成地狱。
我还读到可以实现解决方法。
这是我的代码:
Timer t = new Timer();
t1 = new TimerTask() {
@Override
public void run() {
//Do Something like,
a++;
}
};
t.scheduleAtFixedRate(t1, 0L, 300L); /*Pretty basic till this line. Just a TimerTask ddeclaration and execution via a Timer `t`.*/
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flag == 1) {
t.scheduleAtFixedRate(t1,0,300);//This call says "TimerTask already scheduled," even though purge removed it.
} else {
t1.cancel(); //cancelling the task so that purge does something.
int a = t.purge();//a is 1. Purge worked. TimerTask was removed from the queue.
Log.d("The number of tasks",a+"");//1
flag = 1;
}
}
});
我如何使这项工作?
但是,如果可以使用ScheduleExecutorService,是否有人能够实现此评论中提到的内容? Pause/Resume ScheduleExecutorService
答案 0 :(得分:1)
比在此示例中使用Timer
更好的方法是在UI线程上使用TimerTask
并使用Handler
来安排回调。< / p>
您没有进行任何繁重的处理或任何其他需要在单独的线程上执行回调的内容,并且正在更新需要在UI线程上完成的Handler.postDelayed(...)
元素。