Android 使用flow实现倒计时 超级简单

发布时间:2021年10月04日 阅读:13 次

Android 倒计时一般实现方式:

  • handler+postDelayed() 方式

  • Timer + TimerTask + handler 方式

  • ScheduledExecutorService + handler 方式

  • RxJava 方式

  • CountDownTimer 方式

现在因为有了协程和Flow,我们可以借助Flow这个工具,更加优雅地实现这个需求功能.

1.依赖导入

    api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'     api 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'     // lifecycleScope(可选)     api "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0" 复制代码

2.  代码实现

fun countDownCoroutines(     total: Int,     scope: CoroutineScope,     onTick: (Int) -> Unit,     onStart: (() -> Unit)? = null,     onFinish: (() -> Unit)? = null, ): Job {     return flow {         for (i in total downTo 0) {             emit(i)             delay(1000)         }     }.flowOn(Dispatchers.Main)         .onStart { onStart?.invoke() }         .onCompletion { onFinish?.invoke() }         .onEach { onTick.invoke(it) }         .launchIn(scope) } 复制代码

2.1使用:
private var mCountdownJob: Job? = null mBinding.btnStart.setOnClickListener {     mCountdownJob = countDownCoroutines(60, lifecycleScope,         onTick = { second ->             mBinding.text.text = "${second}s后重发"         }, onStart = {             // 倒计时开始         }, onFinish = {             // 倒计时结束,重置状态             mBinding.text.text = "发送验证码"         }) } mBinding.btnStop.setOnClickListener {      // 取消倒计时     mCountdownJob?.cancel()  }


作者:i小灰
链接:https://juejin.cn/post/7011018975333056519


Tag:flow
相关文章

发表评论: