You need to enable JavaScript to run this app. 如何使用Kotlin Coroutines在Android主线程实现带延迟的长按事件监听
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Kotlin Coroutines在Android主线程实现带延迟的长按事件监听

协程替换实现方案

你需要先确保模块build.gradle中引入了lifecycle协程扩展(已引入可直接忽略):

implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2"

核心实现代码如下,效果和原有Handler逻辑完全对齐:

button.setOnLongClickListener {
    // 使用和页面生命周期绑定的协程作用域,避免内存泄漏
    lifecycleScope.launch {
        // 按钮处于按下状态时持续循环执行
        while (button.isPressed) {
            // 执行需要的UI操作,默认运行在主线程,和原Handler逻辑一致
            Log.e("Press", "Thread name: ${Thread.currentThread().name} ")
            // 间隔500ms执行下一次
            delay(500)
        }
    }
    true
}

方案说明

  • 逻辑完全对齐原有实现:长按触发后立刻执行第一次操作,之后每500ms执行一次,按钮松开后自动终止循环,不会产生残留任务
  • 不需要手动管理回调移除,lifecycleScope会在页面(Activity/Fragment)销毁时自动取消所有未完成的协程,从根源避免内存泄漏
  • 所有逻辑默认运行在主线程,和原Handler使用主线程Looper的效果完全一致,可直接操作UI,不需要额外切换线程
  • 如果是在自定义View中使用,可以替换为viewLifecycleScope,或者自定义协程作用域并在View销毁时调用cancel()手动回收即可

内容的提问来源于stack exchange,提问作者Sharan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 07:45:01