3

嗨,我正在研究 TCP 套接字。我可以每 1 秒读取一次数据。为了实现它,我使用了 TimerTask,如下面的代码所示。

Handler handler = new Handler();
Timer timer = new Timer();

TimerTask doAsynchronousTask = new TimerTask() {

        @Override
        public void run() {
            finalizer = new Runnable() {
                public void run() {
                    try {
                        if (navBool) {
                            runOnUiThread(new Runnable() {
                                public void run() {
                                    new RetriveStock().execute(); // AsyncTask.
                                }
                            });

                        }
                    } catch (Exception e) {
                    }
                }
            };
            handler.post(finalizer);
        }
    }; 
timer.schedule(doAsynchronousTask, 0, 1000);

为了取消这个计时器,我使用了代码作为

timer.cancel();
timer = null;
handler.removeCallbacks(finalizer);

但它并没有取消计时器。我不知道为什么。

4

1 回答 1

2

而不是调用timer.cancel(),您应该取消分配给该计时器的任务(doAsynchronousTask在您的情况下)。由于可以将多个 TimerTask 分配给一个计时器,因此调用timer.cancel()不会干扰当前正在运行的任务。

来自Timer JavaDoc

public void cancel()

终止此计时器,丢弃任何当前计划的任务。不干扰当前正在执行的任务(如果存在)。一旦定时器被终止,它的执行线程就会优雅地终止,并且不能在其上安排更多的任务。

于 2013-10-29T16:14:05.600 回答