简体   繁体   中英

How to cancel timerTask for AsyncTask in android

Hi I am working on TCP socket. I can read data for every 1 sec. to achieve it I used TimerTask as shown in below code.

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);

For canceling this timer I used code as

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

But it is not cancelling the timer. I do not know why.

Instead of calling timer.cancel() , you should be canceling the task that is assigned to that timer ( doAsynchronousTask in your case). Since multiple TimerTasks can be assigned to one timer, calling timer.cancel() will not interfere with a currently running task.

From the Timer JavaDoc :

public void cancel()

Terminates this timer, discarding any currently scheduled tasks. Does not interfere with a currently executing task (if it exists). Once a timer has been terminated, its execution thread terminates gracefully, and no more tasks may be scheduled on it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM