【问题标题】:Remove Runnable queue删除可运行队列
【发布时间】:2020-01-10 13:41:50
【问题描述】:

startTimer方法被调用时,函数showSnackBarInfo()会在lambda中运行多次:

private var timer: CountDownTimer? = null
private val handler = Handler(Looper.getMainLooper())
private val timerAction = Runnable { showSnackBarInfo() }
var timerDuration = TimeUnit.SECONDS.toMillis(10)


fun showSnackBarInfo() {
    Log.d("some", "showSnackBarInfo")
}

fun startTimer() {
    handler.removeCallbacks(timerAction)
    handler.postDelayed(timerAction, timerDuration)
}

fun cancelTimer() = handler.removeCallbacks(timerAction)

【问题讨论】:

标签: android kotlin lambda handler


【解决方案1】:

用 TimerTask 解决了我的问题:

private var timerDuration = TimeUnit.MINUTES.toMillis(1)
private var timer: Timer? = null

fun showSnackBarInfo() {
    viewContract.showInfoMessage()
}

fun startTimer() {
    timer?.cancel()
    timer = Timer().apply {
        schedule(object : TimerTask() {
            override fun run() {
                showSnackBarInfo()
            }
        }, timerDuration)
    }
}

fun cancelTimer() {
    timer?.cancel()
    timer?.purge()
    timer = null
}

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 2021-03-08
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2017-03-25
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多