在 Android 应用中使用 Kotlin 协程 - 官方示例

2022-10-28  本文已影响0人  行走中的3卡

官方介绍:
在高阶函数中使用协程

1. 原始代码

// MainViewModel.kt

fun refreshTitle() {
   viewModelScope.launch {
       try {
           _spinner.value = true
           // this is the only part that changes between sources
           repository.refreshTitle()
       } catch (error: TitleRefreshError) {
           _snackBar.value = error.message
       } finally {
           _spinner.value = false
       }
   }
}

分析:
(1) refreshTitle 里, 除了 repository.refreshTitle() 是真正数据加载的操作,
其余的是 显示 加载图标 和 错误的样板代码.

2. 在高阶函数中使用协程

新增 高阶函数 launchDataLoad

\\MainViewModel.kt

private fun launchDataLoad(block: suspend () -> Unit): Job {
   return viewModelScope.launch {
       try {
           _spinner.value = true
           block()
       } catch (error: TitleRefreshError) {
           _snackBar.value = error.message
       } finally {
           _spinner.value = false
       }
   }
}

重构 refreshTitle() 以使用新函数.

// MainViewModel.kt
fun refreshTitle() {
   launchDataLoad {
       repository.refreshTitle() // 实际加载数据
   }
}

分析:
(1) 将显示加载图标 和显示错误的逻辑,抽取出来
(2) 简化了实际 加载数据 的代码.
(3) launchDataLoad 接受 的参数block, 是一个suspend 的lambda 表达式.


block: suspend () -> Unit
上一篇 下一篇

猜你喜欢

热点阅读