Kotlin Flow 開發應用實踐之倒計時

倒計時能夠說是安卓開發的常見需求,以前實現廣泛是如下幾種方案android

  • handler+postDelayed() 方式
  • Timer + TimerTask + handler 方式
  • ScheduledExecutorService + handler 方式
  • RxJava 方式
  • CountDownTimer 方式

如今由於有了協程和Flow,咱們能夠藉助Flow這個工具,更加優雅地實現這個需求功能.git

  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"
複製代碼
  1. 代碼實現
fun countDownCoroutines(total:Int,onTick:(Int)->Unit,onFinish:()->Unit, scope: CoroutineScope = GlobalScope):Job{
    return flow{
        for (i in total downTo 0){
            emit(i)
            delay(1000)
        }
    }.flowOn(Dispatchers.Default)
        .onCompletion { onFinish.invoke() }
        .onEach { onTick.invoke(it) }
        .flowOn(Dispatchers.Main)
        .launchIn(scope)
}
複製代碼

利用Flow實現整個流程更加流程和優雅,CoroutineScope默認使用GlobalScope,考慮到內存泄漏,建議使用lifecycleScope,更好地實現生命週期管理,避免內存泄漏.github

Demo地址api

相關文章
相關標籤/搜索