如何使用 Kotlin Coroutines 在 Android 主线程上延迟获得长按事件

How to get long click events on Android main thread with a delay using Kotlin Coroutines

我的解决方案可能不像使用处理程序编写的那样优雅,但给了我想要的体验,只要按下按钮,长按事件,一些 ui这个过程应该发生,这个过程应该稍微延迟,因为事件流很快,我想使用 Kotlin 的协程进行类似的体验 API.

button.setOnLongClickListener {
        val handler = Handler(Looper.myLooper()!!)
        val runnable: Runnable = object : Runnable {
            override fun run() {
                handler.removeCallbacks(this)
                if (nextButton.isPressed) {
                    Log.e("Press", "Thread name: ${handler.looper.thread.name} ")
                    handler.postDelayed(this, 500)
                }
            }
        }
        handler.postDelayed(runnable, 0)
        true
    }

这样也可以

button.setOnLongClickListener {
    GlobalScope.launch(Dispatchers.Main) {
        while (isActive && nextButton.isPressed) {
            Log.e("Press", "Thread name: ${handler.looper.thread.name} ")
            delay(500)
        }
    }
    true
}

注意:不要像我一样使用 GlobalScope!使用 lifecycleScope 或任何有意义的东西。