我正在尝试开发一个小型Android应用程序。在那个应用程序中我需要使用Timer控件,它将在按钮点击时触发。我得到的问题是,第一个计时器任务调用工作正常,但当我再次调用它时,我的应用程序崩溃了。用于计时器任务的代码是:
Timer timer = new Timer();
TimerTask refreshRam;
final Handler handler = new Handler();
refreshRam = new TimerTask()
{
public void run()
{
handler.post(new Runnable()
{
public void run()
{
txtFreeRam.setText(String.valueOf(getFreeRam()).toString());
}
});
}};
}
timer.schedule(refreshRam, 400);
我只想在点击按钮时调用我的计时器任务。不应该重复...... 感谢
答案 0 :(得分:0)
使用timer.scheduleatfixedrate而不是schedule
timer.scheduleAtFixedRate(refreshRam,400,5000);
答案 1 :(得分:0)
当您重新安排计时器时,它会抛出:
java.lang.IllegalStateException: TimerTask is scheduled already
似乎你只能使用一次计时器。
为了重新安排定时器,您需要每次只创建一个新的实例。如下:
.
.
.
//first time; works fine!
timer = new Timer();
refreshRam = new TimerTask() { ... }
timer.schedule(refreshRam, 400);
//second time; also works fine!
//be sure to terminate the timer task that is running by calling timer.cancel()
timer.cancel();
timer = new Timer();
refreshRam = new TimerTask() { ... }
timer.schedule(refreshRam, 400);