Android Studio(Kotlin)如何实现无延迟的无限间隔执行计时器
安卓Kotlin高频率稳定计时器实现说明
需求与原有实现问题
需在Android Studio中使用Kotlin开发,实现间隔约20毫秒执行一次操作、无限运行的计时器。
原有代码
object : CountDownTimer(10000,20){ override fun onTick(millisUntilFinished: Long) { } override fun onFinish() { start() } }.start()
存在问题
- 运行一段时间后计时器会明显减速,原本1秒应走完的时长实际需要6秒
- 即使将执行间隔调整为40毫秒及以上,也仅能暂时缓解问题,后续仍会出现减速
- 参考无延迟的Java实现经Android Studio自动转换为Kotlin代码后,会导致应用启动崩溃
可行稳定实现方案
基于协程适配后的实现代码如下,可完全解决上述问题:
val timerName = lifecycleScope.launch(Dispatchers.IO) { while (isActive) { lifecycleScope.launch { doSomething() } delay(20L) } }
方案特性
- 依托Android官方协程框架,无累计延迟问题,计时精度稳定
- 绑定
lifecycleScope可自动跟随页面生命周期销毁,避免内存泄漏 - 循环逻辑运行在IO线程,不会阻塞主线程UI渲染,操作执行和计时间隔互不影响
isActive状态判断自动识别协程存活状态,无需额外维护退出逻辑
内容的提问来源于stack exchange,提问作者Szomti
相关产品推荐
相关产品推荐

