java - 尝试为 `coroutine`编写 `handler`模拟,但不起作用

标签 java android kotlin handler kotlin-coroutines

我是coroutines的新手。所以现在我看如何使用协程而不是处理程序

处理程序代码:

fun Handler.repostDelayed(func: Runnable, delay: Long) {
removeCallbacksAndMessages(null)
postDelayed(func, delay)
}

协程中的模拟
inline fun AppCompatActivity.repostDelayed(crossinline func: () -> Unit, delay: Long) {
    lifecycleScope.cancel()
    lifecycleScope.launch {
        delay(delay)  //debounce timeOut
        func()
    }
}

但这行不通。
您能为协程修复我的表情吗?

最佳答案

因此,我找到了解决方案here
并做了一些修改:

 fun <T, V> CoroutineScope.debounce(
    waitMs: Long = 300L,
    destinationFunction: T.(V) -> Unit
): T.(V) -> Unit {
    var debounceJob: Job? = null
    return { param: V ->
        debounceJob?.cancel()
        debounceJob = launch {
            delay(waitMs)
            destinationFunction(param)
        }
    }
}

用法:
 private val delayFun: String.(Boolean) -> Unit = lifecycleScope.debounce(START_DELAY) {
        if(it){
            print(this)
        }
    }

     //call function
     "Hello world!".delayFun(true)

使用协程的好处是,您无需在查看onDesstroy时取消协程,因为协程会自动运行!
但是对于处理程序,您必须调用removeCallbacksAndMessages onDestroy

关于java - 尝试为 `coroutine`编写 `handler`模拟,但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60338482/

相关文章:

android - 将来自不同 Firebase 项目的两项 Firebase 服务用于一个移动应用程序

Android protobuf-lite toString 不工作

java - TrackballGestureDetector 实例化

java - 数组的打印结果很难弄清楚

java - 在android中调用XML中的java方法

android - 导航时 Navigation Host 变为 null(Android 导航组件)

java - 带有 5 个进度条的评级进度图表

android - Android Studio 测试中的颜色含义

java - 带有背景图像的 JTextArea 的内部填充

java - 并行执行两个 AsyncTask