onClick()设置增量和延迟

时间:2018-04-13 19:19:42

标签: java android multithreading

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

我找到了三种或四种关于如何使用CountDownTimerTimeronClick()或其他方式设置警报的方法,但我对如何设置感到困惑只用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(); } 方法做我正在寻找的东西。

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

onClick()

我的public void onClick(View view) { increment(); wait3s(); startStop(); } 只是称之为:

wait3s()

正如您所看到的,问题的一部分是我在每次点击时都在调用wait3s(),我需要一种方法来控制线程/定时器(无论如何),而不需要创建一个新的线程/定时器每次点击。我现在有点傻了,但是我已经有一段时间了,而且我还是空着,因为我之前从未使用过它。

我找到的{{1}}函数的另一个选项就像in this other StackOverflow thread

谢谢

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

2 个答案:

答案 0 :(得分:1)

Handler.removeCallbacks将有效取消runnable。

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();
    }
}

答案 1 :(得分:0)

以下是我如何解决它。虽然建议更接近,但它们并不完全符合我的要求,就逻辑而言,它们并不完全有用,会产生更多问题。也许这是由于我对这个问题的解释,也许是因为我是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()方法。结果非常整洁。