Kotlin高阶系列之协程

147 阅读2分钟

image.png

前言

如何快速高效的掌握一门学问,建议先阅读下这篇文章关于学习的一些看法

码字不易,记得关注+点赞+收藏

一、协程是什么?

协程是一种并发设计模式,用来简化异步执行的代码

二、为什么使用协程?

  • 轻量:主要体现在其高效利用系统资源简化异步编程模型上,具体来说:
    • 资源优化:可在单个线程上运行多个协程,减少内存占用,降低系统开销。
    • 代码简洁:以同步方式编写异步逻辑,避免回调地狱,提升代码可读性和可维护性。
  • 支持挂起与取消
    • 挂起:通过挂起机制,实现非阻塞执行,保持应用响应性。
    • 取消:通过取消机制,自动管理异步任务,确保应用资源的有效利用和响应性。
  • 避免内存泄漏
    • 通过CoroutineScope自动管理协程生命周期,防止内存泄漏。
  • Jetpack 集成
    • 许多 Jetpack 库都包含提供全面协程支持的扩展。某些库还提供自己的协程作用域,可用于结构化并发

总之,协程通过精巧设计,以少量资源实现复杂异步控制极大提升了开发效率和应用性能

三、如何使用协程?

class LoginRepository(...) {
    suspend fun makeLoginRequest(
        jsonBody: String
    ): Result<LoginResponse> {
        // Move the execution of the coroutine to the I/O dispatcher
        return withContext(Dispatchers.IO) {
            // Blocking network request code
        }
    }
}
class LoginViewModel(
    private val loginRepository: LoginRepository
): ViewModel() {
    fun login(username: String, token: String) {
        // Create a new coroutine on the UI thread
        viewModelScope.launch {
            val jsonBody = "{ username: "$username", token: "$token"}"
            // Make the network call and suspend execution until it finishes
            val result = loginRepository.makeLoginRequest(jsonBody)
            // Display result of the network request to the user
            when (result) {
                is Result.Success<LoginResponse> -> // Happy path
                else -> // Show error in UI
            }
        }
    }
}

通过上述代码,提取关键信息,逐步深入理解协程相关概念,方能运用自如。

1、suspend 挂起与恢复

2、CoroutineScope 作用域

3、launch与async 创建

4、CoroutineContext 上下文