Java 如何强制while循环一次执行一个runnable。
我试着在每次重复之后制作一个时间间隔不均匀的简单计时器 我的发言如下:Java 如何强制while循环一次执行一个runnable。,java,android,multithreading,Java,Android,Multithreading,我试着在每次重复之后制作一个时间间隔不均匀的简单计时器 我的发言如下: case R.id.start: timerRuns = true; startCycle(); break; 循环本身如下所示: private void startCycle() { pomodoroLeft = numPomodoro; while(pomodoroL
case R.id.start:
timerRuns = true;
startCycle();
break;
循环本身如下所示:
private void startCycle() {
pomodoroLeft = numPomodoro;
while(pomodoroLeft > 0) {
pomodoroLeft--;
actualSeconds = pomodoroLength * ONE_MINUTE;
setTimeAndRun(actualSeconds);
actualSeconds = shortLength * ONE_MINUTE;
setTimeAndRun(actualSeconds);
}
}
方法调用:
private void setTimeAndRun(long timePeriod) {
runTime = timePeriod;
runnable.run();
}
最后是runnable本身:
private Runnable runnable = new Runnable()
{
public void run() {
if (timerRuns) {
runTime -= ONE_SECOND;
String str = String.format("%1$02d : %2$02d",
TimeUnit.MILLISECONDS.toMinutes(runTime),
TimeUnit.MILLISECONDS.toSeconds(runTime) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(runTime))
);
timeShown.setText(str);
mHandler.postDelayed(this, 1000);
if(timeShown.getText().toString().contentEquals("00 : 00")) {
stopClock();
//here goes the alarm.
}
}
}
};
我的问题是,当我启动计时器时,while循环似乎会执行所有操作
上一个方法调用的不完整run()。因此,timeShown TextView立即显示此actualSeconds=shortLength*1_MINUTE
,每秒跳过1秒,因为2个runnables同时运行
我想在这里实现顺序执行。这样做的最佳方式是什么?也许实现非匿名子类并每次实例化它会有所帮助
此外,如果您有任何其他的建议,可以改进我的代码,我将不胜感激 您应该看看队列 下面是一个类似问题的链接: 您应该使用Executors.newSingleThreadExecutor() 以下是关于执行者的教程: 以下内容可能有助于您更好地理解java中的多线程:
希望这能有所帮助。我不认为
postDelayed(这,…)
会导致run()
方法停止。它尝试将同一Runnable
的第二次执行安排在1秒后,但第一次run()
继续执行,并很快返回调用方。不幸的是,我不太熟悉如何在Android上做这类事情,所以我最好让其他人想出解决方案。