KickAss
KickAss

Reputation: 4290

Android Java Timer()

I'm using Timer() due to its accuracy but works in the same was as PostDelayed Handler. It's called only once. Here is the Timer code:

    public void setWFT() {
        WFT = new Timer();
        WFT.schedule(new TimerTask() {          
            @Override
            public void run() {
                WFTTimerMethod();
            }
        }, 60000); // 60 seconds delay
    }

    private void WFTTimerMethod() {
        this.runOnUiThread(Timer_Tick);
    }

    private Runnable Timer_Tick = new Runnable() {
        public void run() {
            // My commands here
        }
    };

This only calls run() once after 60 seconds once the Timer is started. Sometimes, I have to cancel the Timer to Update the delay (replace the "60000" value). To start the Timer again, I simply recreate the Timer by calling WFT() again with the new delay value.

Problem is, when I cancel the timer using:

WFT.cancel();
WFT.purge();

The Timer does not start. the run() doesn't execute when it's supposed to. So my question is do I use cancel() and purge() or just cancel()?

Thanks

Upvotes: 0

Views: 864

Answers (2)

njzk2
njzk2

Reputation: 39405

from cancel() documentation :

No more tasks may be scheduled on this Timer.

Upvotes: 0

Bryan Denny
Bryan Denny

Reputation: 27596

From the Java API on purge():

Most programs will have no need to call this method. It is designed for use by the rare application that cancels a large number of tasks. Calling this method trades time for space: the runtime of the method may be proportional to n + c log n, where n is the number of tasks in the queue and c is the number of cancelled tasks.

So you only need to call cancel()

Upvotes: 3

Related Questions