如何确定我的定时器是否已经完成了所有的任务?

问题描述 投票:0回答:1

我在谷歌上搜索了一下,得到的答案都是简单的只检查一个任务是否完成,我想检查的是所有的任务是否都完成了,还是定时器处于空闲状态?有什么好的方法来管理它吗?

   val timer =Timer()
        timer.schedule(object:TimerTask(){
            override fun run() {
                Timber.d("task1")
            }
        },1000)

        timer.schedule(object:TimerTask(){
            override fun run() {
                Timber.d("task2")
            }
        },3000)
java android kotlin
1个回答
1
投票

IIRC没有内置的功能来检查定时器是否已经完成了所有的任务。

你可以做的一件事是创建一个扩展函数,可能会算作。

fun Timer.schedule(delay: Long, counter: AtomicInteger, task: TimerTask.() -> Unit) {
    counter.incrementAndGet()
    schedule(object : TimerTask{
        override fun run() {
            task()
            counter.decrementAndGet()
        }
    }, delay)
}

现在通过传递一个AtomicInteger来调用时间表。

val timer = Timer()
val counter = AtomicInteger(0)

timer.schedule(1_000L, counter) {
    Timber.d("task1")
}
timer.schedule(3_000L, counter) {
    Timber.d("task2")
}

// check somewhere
val remaining = counter.get()
if (remaining == 0) {
    // timer has finished all the tasks
} else {
    // timer has tasks remaining
    println("Timer has $remaining tasks")
}

然而这种合成糖的主要缺点是,如果你使用实际的 Timer.schedule 类中定义的,那么你就无法确定有多少任务是活着的。因为无论如何std-lib都没有实现这个功能。

© www.soinside.com 2019 - 2024. All rights reserved.