如何使用 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
或任何有意义的东西。
我的解决方案可能不像使用处理程序编写的那样优雅,但给了我想要的体验,只要按下按钮,长按事件,一些 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
或任何有意义的东西。