我是Android新手,我正在开发一个带有一组严格参数的小项目。其中之一就是有一个多功能按钮,每次点击它时都会增加一个计时器,并且只有在我没有将所述计时器增加3秒后才启动。
我找到了三种或四种关于如何使用CountDownTimer
,Timer
,onClick()
或其他方式设置警报的方法,但我对如何设置感到困惑只用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:对不起标题,我找不到更好的方式来描述它,如果你有它,并且有能力改变它,请做。
答案 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.Timer
和java.util.TimerTask
。我在increment()
方法中调用了此方法,在onClick()
下我只有increment()
方法。结果非常整洁。