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
)
}
我正在学习 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
)
}