【问题标题】:Timer stop after one minute定时器在一分钟后停止
【发布时间】:2014-08-07 05:35:30
【问题描述】:

我做了一个计时器,我想在它达到 60 秒(1 分钟)时停止它。

代码如下:

        Timer t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    myTextView.setText("timer=" + String.valueOf(TimeCounter));
                    TimeCounter++;
                }
               });
            }
    }, 0, 1000);  
    int I=60;
    if (TimeCounter == I) { 
          -------------- stop the timer here ----------------
       }
       }

我该怎么做?

【问题讨论】:

    标签: android


    【解决方案1】:

    你可能需要在你的任务中移动停止条件......所以它看起来不像这样:

    final Timer t = new Timer();
    t.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            runOnUiThread(new Runnable() {
                public void run() {
                    if (TimeCounter == I) {
                        t.cancel();
                        return;
                    }
    
                    myTextView.setText("timer=" + String.valueOf(TimeCounter));
                    TimeCounter++;
                }
               });
            }
    }, 0, 1000);
    

    记得提前定义:

    int I=60;
    

    另外,您可能需要将 Timer 标记为 final(就像我在代码中所做的那样)。

    【讨论】:

    • TY!!!计时器停在 59,我需要它停在 60,所以我把 int I=61;我将添加 t.purge();
    • 是的,你是对的......我编辑了代码,如果你将 I 设置为 60,它会在 60 处停止。干杯。
    【解决方案2】:

    尝试下面的代码来停止计时器:-

    if (TimeCounter == I) { 
              t.cancel();
           }
    

    另见以下链接:-

    How to stop immediately the task scheduled in Java.util.Timer class

    【讨论】:

      【解决方案3】:

      您可以使用 CountDownTimer,也许这是一个更简单的解决方案:

            int Time = 0;
      
            public class OneMinuteCountDownTimer extends CountDownTimer {
      
             public OneMinuteCountDownTimer (long startTime, long interval) {
      
            super(startTime, interval);
          }
      
        @Override
        public void onFinish() {
      
                   myTextView.setText("timer="+Time+" time finished");
                   Time=0;
        }
      
        @Override
        public void onTick(long millisUntilFinished) {
                   Time++;
               myTextView.setText("timer="+Time);
        }
       }
      
      }
      

      将 CountDownTimer 设为全局并在您想要启动 CountDownTimer 时调用它:

             private OneMinuteCountDownTimer countDownTimer;
             private final long startTime = 60 * 1000;
             private final long interval = 1 * 1000;
      

      onCreate 内部(编辑):

             countDownTimer = new OneMinuteCountDownTimer(startTime,interval);
      
             countDownTimer.start();
      

      如果您想在一分钟前取消它,请取消它:

             countDownTimer.cancel();
      

      【讨论】:

      • 我把第一个代码放在:“public class FirstActivity extends Activity implements OnClickListener {”第二个代码私有在所有私有的地方,以及“countDownTimer.start();” “public void onCreate”处的代码,我的应用程序在启动时崩溃..
      • 看我的编辑,可能你忘了初始化倒计时
      • 有人帮助了我,但对我来说倒计时比常规计时器更好,所以我会试试看 :) ty.
      • 如果你有任何问题,回来:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多