我在谷歌上搜索了一下,得到的答案都是简单的只检查一个任务是否完成,我想检查的是所有的任务是否都完成了,还是定时器处于空闲状态?有什么好的方法来管理它吗?
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)
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都没有实现这个功能。