Kotlin 协程总结

2022-06-10 14:39:09 浏览数 (1)

文章目录

  • 一、协程是什么
    • 1.简介
    • 2.协程好在哪
    • 3.协程具体怎么用
      • a.添加依赖
      • b.开始使用
      • c.suspend
    • 4.小结
  • 二、挂起是什么
    • 1.「挂起」的本质
      • 线程:
      • 协程:
    • 2.怎么就「挂起」了?
    • 3.suspend 的意义?
    • 4.怎么自定义 suspend 函数?
      • a.什么时候需要自定义 suspend 函数
      • a.具体该怎么写
    • 5.小结
  • 三、挂起的非阻塞式是怎么回事
    • 1.什么是「非阻塞式挂起」
    • 2.为什么要讲非阻塞式挂起
    • 3.协程与线程
    • 4.小结
  • 四、总结

一、协程是什么

1.简介

协程并不是 Kotlin 提出来的新概念,其他的一些编程语言,例如:Go、Python 等都可以在语言层面上实现协程,甚至是 Java,也可以通过使用扩展库来间接地支持协程。

「协程 Coroutines」源自 Simula 和 Modula-2 语言,这个术语早在 1958 年就被 Melvin Edward Conway 发明并用于构建汇编程序,说明协程是一种编程思想,并不局限于特定的语言。

当我们在了解协程的时候,不可避免的会跟线程进程做比较做分析,下面来贴个图便于理解

Android 开发者的角度去理解它们的关系:

  • 我们所有的代码都是跑在线程中的,而线程是跑在进程中的。
  • 协程没有直接和操作系统关联,但它不是空中楼阁,它也是跑在线程中的,可以是单线程,也可以是多线程。
  • 单线程中的协程总的执行时间并不会比不用协程少。
  • Android 系统上,如果在主线程进行网络请求,会抛出NetworkOnMainThreadException,对于在主线程上的协程也不例外,这种场景使用协程还是要切线程的。

协程设计的初衷是为了解决并发问题,让 「协作式多任务」 实现起来更加方便。

协程就是 Kotlin 提供的一套线程封装的 API,但并不是说协程就是为线程而生的。

不过,我们学习 Kotlin 中的协程,一开始确实可以从线程控制的角度来切入。因为在 Kotlin 中,协程的一个典型的使用场景就是线程控制。就像 Java 中的Executor 和 Android 中的AsyncTask,Kotlin 中的协程也有对 Thread API 的封装,让我们可以在写代码时,不用关注多线程就能够很方便地写出并发操作。

下面的例子是使用协程进行网络请求获取用户信息并显示到 UI 控件上:

代码语言:javascript复制
launch({
    val user = api.getUser() // 


	

0 人点赞