我需要一种方法来使用在start命令上运行的计时器。最初,计时器将被告知要运行多长时间。但是,我需要一种方法在两者之间改变这种方式。如果用户指定他们想要更改计时器运行的时间(通过减少,增加甚至结束计时器)。我还希望能够通过以分钟:秒格式显示当前时间来更新UI。
用户可能还想生成多个计时器 - 因此他们应该有一种监控和访问他们设置的不同计时器的方法。
目前这就是我所拥有的 - 从我所知道的,它起作用..但我感觉不太好:我怎么能让它变得更好?或者这样做的正确方法是什么?请记住,在此计时器运行时会发生其他事情 - 例如,用户可能正在与UI交互并执行与计时器无关的不同命令。
我真的不太了解线程或线程......所以这对我来说相对较新..
提前感谢!
在主要方面:
//every time they request for a new timer, i will instantiate a new Task object..
Task task = new Task();
task.run()
task.getTaskTime();
Task.java:
public class Task extends Thread{
@Override
public void run()
{
timer = new Timer(60 * 60);
timer.start();
}
public boolean getTImerRunning() {
return timer.timerRunning;
}
public double getTaskTime() {
return timer.currentTime;
}
}
在Timer.java中:
public class Timer extends Thread {
public static final int DEFAULT_TIMER = 180;
private long startMinute = 0;
private int _timer;
public double currentTime = 0;
public boolean timerRunning = true;
Timer(int timer) {
this._timer = timer;
}
Timer() {
this._timer = DEFAULT_TIMER;
}
@Override
public void run(){
long start = System.currentTimeMillis();
startMinute = start;
while(elapsedTime() <= this._timer) {
currentTime = elapsedTime();
}
timerRunning = false;
}
/**
* Return elapsed time since this object was created.
*/
private double elapsedTime() {
long now = System.currentTimeMillis();
return (now - startMinute);
}
}
答案 0 :(得分:1)
每次用户创建“计时器”时,不要创建新任务,而是创建一个包含创建时间和倒计时持续时间的对象MyTimer,并将实例添加到ArrayList。
第一次也是第一次,用户创建一个计时器,您将创建一个每秒执行一次的任务。当该任务执行时,它会更新UI并循环遍历ArrayList并通过调整倒计时持续时间来更新MyTimer的每个实例。
这应该保持简单并减少开销。
祝你好运!