【问题标题】:onClick() setting incrementation and delayonClick() 设置增量和延迟
【发布时间】:2018-04-13 19:19:41
【问题描述】:

我是 Android 新手,我正在开发一个带有一组严格参数的小型项目。其中之一是有一个多功能按钮,每次单击它都会增加一个计时器,并且只有在我没有增加所述计时器 3 秒后才会启动。

我找到了三到四种方法来设置各种警报,使用 HandlerCountDownTimerTimer 或其他方式,但我对如何做我正在寻找的事情感到困惑仅使用 onClick() 方法。

等待3s()的函数,我在之后调用它:

public void wait3s()
{
    Thread thread = new Thread() {
        @Override
        public void run()
        {
            while (!isInterrupted()) {

                try {
                    Thread.sleep(3000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            count++;
                            threeS.setText(String.valueOf(count));
                        }
                    });

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    thread.start();
}

我的onClick() 只是调用这些:

public void onClick(View view)
{
      increment();
      wait3s();
      startStop();
}

如您所见,部分问题是我在每次点击时都会调用wait3s(),我需要一种方法来控制线程/计时器(无论如何),而不是在每次点击时创建一个新的.我现在有点笨,但我已经做了一段时间了,但我仍然空虚,因为我以前从未使用过这个。

我发现wait3s() 函数的另一个选项是in this other StackOverflow thread

谢谢

PS:对不起标题,我找不到更好的方式来描述它,如果你有它,并且有能力改变它,请做。

【问题讨论】:

    标签: java android multithreading


    【解决方案1】:

    Handler.removeCallbacks 将有效地取消一个可运行对象。

    boolean timerStarted = false;
    clockHandler = new Handler();
    
    OnClick(){
        if (!timerStarted){
            incrementTimer();
            clockHandler.removeCallbacks(null);
            clockHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                        // maybe kick off another handler/runnable here to start your timer
                        timerStarted = true;
                    }
                }
            }, 3 * 60 * 1000);
        } else {
            startStop();
        }
    }
    

    【讨论】:

      【解决方案2】:

      这是我解决它的方法。尽管这些建议更接近,但它们并没有完全符合我的要求,就逻辑而言,它们并不完全有帮助,从而产生了更多问题。也许是因为我对问题的解释,也许是因为我是 Android Studio 的新手,并且在这里与我分享了解释。如果看起来我只是在使用我自己的互联网积分答案,请原谅我,我只需要自己做更多的事情来理解这一点,而不是我从这里分享的答案中实际得到的。

      public void wait3s()
      {
           t.schedule(new TimerTask() {
               @Override
              public void run() {
                   runOnUiThread(new Runnable() {
                      @Override
                      public void run() {
                          startStop();
                      }
                  });
              }
          }, 3000);
      }
      

      变量t 是一个Timer(),我必须导入类java.util.Timerjava.util.TimerTask。我在increment() 方法中调用了这个方法,在onClick() 下我只有increment() 方法。结果非常整洁。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        相关资源
        最近更新 更多