Java 每次我按下按钮时都会创建一个新的计时器实例

Java 每次我按下按钮时都会创建一个新的计时器实例,java,android,time,Java,Android,Time,我正在设计一个递增时钟,它将在点击按钮时执行,并在时间流逝时更新文本视图的内容。但是每次我按下这个按钮,前一个时钟就不会被清除,一个新的实例就会启动并与前一个线程并行运行。我无法理解,因为我该如何阻止同样的行为。以下是我的代码: 类级别变量: ================================================================================ private View.OnClickListener but = new View.O

我正在设计一个递增时钟,它将在点击按钮时执行,并在时间流逝时更新文本视图的内容。但是每次我按下这个按钮,前一个时钟就不会被清除,一个新的实例就会启动并与前一个线程并行运行。我无法理解,因为我该如何阻止同样的行为。以下是我的代码:

类级别变量:

================================================================================

  private View.OnClickListener but = new View.OnClickListener() {

    public void onClick(View v) {
        if (isOnline() == true) {
            tripTimeCounter = new CountDownTimer(60 * 1000, 1000) {

                @Override
                public void onFinish() {
                    // TODO Auto-generated method stub
                    repeatCounter = repeatCounter + 1;

                    this.start();
                    // startTimeCounter();
                }

                @Override
                public void onTick(long millisUntilFinished) {
                    // TODO Auto-generated method stub
                    timedisplay = (TextView) findViewById(R.id.textView3);
                    timedisplay.setText(formatInterval((repeatCounter * 60)
                            * 1000 - millisUntilFinished));

                }

            }.start();
            tripTimeCounter.start();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Not connected to the internet", Toast.LENGTH_LONG)
                    .show();
        }
    }
};

只是浏览了一下,但在谷歌定时器之后,看到了这个方法,它说:

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


如果每次单击“创建新计时器”,您会期望什么:tripTimeCounter=new CountDownTimer(60*1000,1000)?如何取消旧计时器?这就是我所困惑的!。检查取消方法混乱的部分:对onTick(long)的调用与此对象同步,以便在上一次回调完成之前不会发生对onTick(long)的一次调用。为什么这
this.start()
?。但是在哪里调用取消?这就是问题所在,伙计!这一切都发生在一个按钮点击!大概就在新创建之前,比如:if(tripTimeCounter!=NULL)tripTimeCounter.cancel();tripTimeCounter=new CountDownTimer(60*1000,1000){…等可以工作,只有秒被重置。另一天令人难以置信!CountDownTimer类型的方法purge()没有定义。你是对的,对此表示抱歉。你说的只有秒被重置是什么意思?只是为了让我正确理解。
  private View.OnClickListener but = new View.OnClickListener() {

    public void onClick(View v) {
        if (isOnline() == true) {
            tripTimeCounter = new CountDownTimer(60 * 1000, 1000) {

                @Override
                public void onFinish() {
                    // TODO Auto-generated method stub
                    repeatCounter = repeatCounter + 1;

                    this.start();
                    // startTimeCounter();
                }

                @Override
                public void onTick(long millisUntilFinished) {
                    // TODO Auto-generated method stub
                    timedisplay = (TextView) findViewById(R.id.textView3);
                    timedisplay.setText(formatInterval((repeatCounter * 60)
                            * 1000 - millisUntilFinished));

                }

            }.start();
            tripTimeCounter.start();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Not connected to the internet", Toast.LENGTH_LONG)
                    .show();
        }
    }
};