Android 更新 Kotlin 中的计时器间隔时间

Update Timer interval time in Kotlin for Android

我正在学习 Kotlin/Android 并且我创建了一个 TimerTask 以根据用户在下拉菜单中的选择每 x 秒调用一次 API。我可以创建任务,但是当用户更新菜单中的 interval(x) 值时,将创建一个新任务并且之前的任务保持 运行.

我尝试在计时器上使用 cancel,但应用程序崩溃并显示 Timer already cancelled。如何更新定时器的间隔值 and/or 取消之前的实例?

这是 TimerTask class:

import java.util.*
import java.util.concurrent.TimeUnit

class Schedule {
    private val timer = Timer()

    fun createTask(task: () -> Unit, intervalSeconds: Long) {
        val millisInterval:Long = TimeUnit.SECONDS.toMillis(intervalSeconds)
        val startDelay:Long = 0

        timer.scheduleAtFixedRate(object : TimerTask() {
            override fun run() {
                task()
            }
        }, startDelay, millisInterval)
    }

    fun cancelPrevTask(){
            timer.cancel()
    }
}

这是 activity 中的实现:

...

private val schedule = Schedule()
...

  override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        val item = parent.getItemAtPosition(pos).toString()
        showMessage(this, item)
        val interval = item.toLong()
        
       // schedule.cancel() <- this crashes the app
       
       schedule.createTask(
            { readFileAndPost(this) },
            interval
        )

    }

我设法解决了使 schedule 成为 var 并在取消任务后创建 class 的新实例的问题。

这是结果 activity:

...
private var schedule = Schedule()
...
override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        val item = parent.getItemAtPosition(pos).toString()
        showMessage(this, item)
        val interval = item.toLong()

        schedule.cancelPrevTask()
        schedule = Schedule()

        schedule.createTask(
            { readFileAndPost(this) },
            interval
        )

    }