如何在安卓中取消AsyncTask的timerTask

3

您好,我正在处理TCP套接字相关工作。

为了实现每秒读取数据的目标,我使用了以下代码中展示的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);

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

1个回答

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

public void cancel()

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


我该如何取消当前正在运行的任务呢? - user2085965
在您的情况下,使用 doAsynchronousTask.cancel(true)。(true 参数表示如果当前正在执行,则对 cancel() 的调用可以抢占线程。) - Ben Siver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接