# Android 中如何使用 Kotlin 协程？

By [gualeyizhenfeng](https://paragraph.com/@gualeyizhenfeng) · 2023-05-13

---

作者：程序员小铭 链接：[https://www.zhihu.com/question/582908510/answer/2945018004](https://www.zhihu.com/question/582908510/answer/2945018004) 来源：知乎 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。 在 Android 上，避免阻塞主线程是非常必要的。主线程是一个处理所有界面更新的线程，也是调用所有点击处理程序和其他界面回调的线程。因此，主线程必须顺畅运行才能确保出色的用户体验在实际开发中我们会遇到这种场景创建子线程执行耗时操作，然后切换到主线程处理界面显示逻辑；但是如果我们在一个接口请求完成后，拿到这个接口返回的结果，在需要去请求另一个接口时，逻辑就会十分复杂，就会出现回调地狱；并且如果在需要考虑接口失败的场景呢？使用Rxjava优化上面的场景；没有内存泄漏、支持取消、正确的使用线程，但是它比较复杂，如 subscribeOn、observeOn、map 或者 subscribe，都需要学习这个时候kotlin 协程就出场了，它可以帮我们解决上面的痛点2.什么是协程看下官方的定义，协程是一种并发设计模式。特点：协程是我们在 Android 上进行异步编程的推荐解决方案。值得关注的特点包括：轻量：您可以在单个线程上运行多个协程，因为协程支持挂起，不会使正在运行协程的线程阻塞。\*\*挂起比阻塞节省内存，且支持多个并行操作。内存泄漏更少：使用结构化并发机制在一个作用域内执行多项操作。\*\*内置取消支持：取消操作会自动在运行中的整个协程层次结构内传播。Jetpack 集成：许多 Jetpack 库都包含提供全面协程支持的扩展。某些库还提供自己的协程作用域，可供您用于结构化并发。3.那协程到底是什么？官方定义协程是一种轻量级的线程并且举例：创建10000个线程和创建10000个协程来比较协程是比线程轻量，但是协程是线程上层的封装，是基于线程的。要比较也应该和线程池比较。所以这种并不能说明协程比线程轻量。协程的轻量更多的是表现在协程的使用上面。所以协程其实就是在一个线程挂起并且自己可以在另一个线程恢复的一段程序。4.如何学习Kotlin协程知识的学习过程就像谈恋爱一样，讲究循序渐进。上来就想深入了解的话，那大概率是很容易翻车的。但聊得太浅吧，感情又不到位，后续想深入后很难。没有系统的学习是很难讲学到的知识点融会贯通的，所以这里分享谷歌十年技术专家联合打造“最新”《史上最详android版kotlin协程入门进阶实战指南》，帮助大家根据自身不同的阶段，更好的去检索学习Kotliin协程，下面正文开始，需要完整版的可以 点击这里 直接领取。第一章 Kotlin协程的基础介绍协程是什么什么是Job 、Deferred 、协程作用域Kotlin协程的基础用法 第二章 kotlin协程的关键知识点初步讲解协程调度器协程上下文协程启动模式协程作用域挂起函数第三章 kotlin协程的异常处理协程异常的产生流程协程的异常处理 第四章 kotlin协程在Android中的基础应用Android使用kotlin协程在Activity与Framgent中使用协程ViewModel中使用协程其他环境下使用协程 第五章 kotlin协程的网络请求封装协程的常用环境协程在网络请求下的封装及使用高阶函数方式多状态函数返回值方式直接返回值的方式第六章 深入kotlin协程原理（一）suspend 的花花肠子藏在身后的- Continuation村里的希望- SuspendLambda 第七章 深入kotlin协程原理（二）协程的那些小秘密协程的创建过程协程的挂起与恢复协程的执行与状态机第八章 Kotlin Jetpack 实战从一个膜拜大神的 Demo 开始Kotlin 写 Gradle 脚本是一种什么体验？Kotlin 编程的三重境界Kotlin 高阶函数Kotlin 泛型Kotlin 扩展Kotlin 委托协程“不为人知”的调试技巧图解协程原理第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求项目配置实现思路协程实现协程 + ViewModel + LiveData实现后续优化异常处理更新Retrofit 2.6.0 由于文章涉及到的只是点比较多、内容可能过长，可以根据自己的能力水平和熟悉程度分阶段跳着看，《史上最详android版kotlin协程入门进阶实战指南》完整版的可以 点击这里 直接领取

---

*Originally published on [gualeyizhenfeng](https://paragraph.com/@gualeyizhenfeng/android-kotlin)*
