多个定时器,可以监控和调整

时间:2013-12-13 04:06:54

标签: java android multithreading timer

我需要一种方法来使用在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);
    }
}

1 个答案:

答案 0 :(得分:1)

每次用户创建“计时器”时,不要创建新任务,而是创建一个包含创建时间和倒计时持续时间的对象MyTimer,并将实例添加到ArrayList。

第一次也是第一次,用户创建一个计时器,您将创建一个每秒执行一次的任务。当该任务执行时,它会更新UI并循环遍历ArrayList并通过调整倒计时持续时间来更新MyTimer的每个实例。

这应该保持简单并减少开销。

祝你好运!