在android中重用计时器

时间:2014-01-05 04:15:10

标签: android timer

在我的Android应用程序中,我有以下相关代码:

/*Code outside*/    
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        Timer t = new Timer();
        t.scheduleAtFixedRate(
            new TimerTask(){
                public void run(){
                    stuffToBeDone();
                }
            },someVariableDelay,someVariablePeriod);
    }
}

一切都很顺利,直到我注意到每次按下按钮时 stuffToBeDone()都运行了一次。据我所知,每次调用 onClick()并且旧的Timer不再存在,但TimerTask不知何故幸存下来。

在第二个按钮单击中,我不再引用第一个定时器取消()它(因为它不再存在)。如果我在代码之外将Timer定义为 final 变量,这样我就可以做到,取消后我再也无法重用它了。那么如何终止TimerTask但仍然可以使用Timer?

1 个答案:

答案 0 :(得分:4)

Android Timer是基于Android开发者网站的线程:

http://developer.android.com/reference/java/util/Timer.html

  

当不再需要计时器时,用户应该调用cancel(),这会释放计时器的线程和其他资源。未明确取消的计时器可能会无限期地保留资源。

我建议只在onclicklistener中实例化实例,即类似于此:

    /*Code outside*/    
Timer t = null;
button.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        if(t == null)
           t = new Timer();
        else
           t.cancel();
        t.scheduleAtFixedRate(
            new TimerTask(){
                public void run(){
                    stuffToBeDone();
                }
            },someVariableDelay,someVariablePeriod);
    }
}