gpt4 book ai didi

java - 如何强制 while 循环一次执行一个可运行程序。

转载 作者:行者123 更新时间:2023-12-01 13:10:56 24 4
gpt4 key购买 nike

我正在尝试制作一个简单的计时器,每次重复后时间间隔不均匀。

我开始如下:

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

最后是可运行本身:

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 * ONE_MINUTE 并每秒跳过 1 秒,因为有 2 个可运行对象同时运行。

我想在这里实现顺序执行。最好的方法是什么?也许实现非匿名子类并每次实例化它会有所帮助?

此外,如果您有任何其他可以改进我的代码的建议,我将不胜感激。

最佳答案

你应该看看队列。

这里是类似问题的链接:

How to implement a queue of runnables

您应该使用 Executors.newSingleThreadExecutor()

http://developer.android.com/reference/java/util/concurrent/Executors.html#newSingleThreadExecutor%28java.util.concurrent.ThreadFactory

这是关于执行器的教程:

http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

这里还有一些内容可以帮助您更好地理解 java 中的多线程:

Understanding multi-threading

希望这能有所帮助。

关于java - 如何强制 while 循环一次执行一个可运行程序。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22875028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com