• Kotlin - 协程 Coroutine


    概念

    • 协程:本质就是线程框架。一套基于 Thread(线程) 封装的 工具API(就像 Java 的 Executor 、Android 的 AsyncTask Handler 以及 RxJava)。
    • 挂起函数
      • 挂起的本质:切线程执行完后会自动切回来继续。
      • 挂起函数挂起的是当前在执行的协程,然后执行自己的协程。此时被挂起的协程和执行它的线程会分离,线程继续去执行其他任务或无事可干(就是它原本的样子,回收或再利用),当挂起函数执行完会切回来继续执行之前被挂起的协程。这些协程执行在各自指定的线程中(创建时通过Dispatchers调度而不是Thread,因为会切回来而不是单纯指定线程),它们被写在同一代码块里有直观的先后逻辑顺序。
      • 由于消除了回调嵌套可以自定义挂起函数:
        • 什么时候定义:需要做耗时操作的时候(I/O、计算、等待)才会挂起当前的协程。
        • suspend 关键字:用来限制该函数只能在协程里调用或者在其他挂起函数里调用,因为“挂起->执行完->切回去”只有在协程中使用才能实现。真正挂起操作靠的是最终调用的那个协程自带的挂起函数。也有提醒“这是一个耗时操作,是挂起函数要在协程中使用”的意思。
    • 非阻塞式:本质就是不卡线程。对比其他基于 Java 的多线程解决方案,协程的优点是借助 Kotlin 语言的优势,让我们方便在同一代码块(作用域)里做线程切换(看起来同步的方式写出异步代码),即原先串行写的代码现在并行来写(同一代码块里的代码是在同一线程执行(单线程是阻塞式的做耗时操作就会卡线程,切线程就不会卡之前的线程),Java切线程会回调里嵌套回调关系复杂,而协程通过挂起函数切换线程执行完会返回来继续,同代码块里上下行连续写,逻辑直观并消除模板代码),消除多线程异步之间协作任务的操作难度。

    协程作用域 CoroutineScope

    协程上下文 CoroutineContext

    协程创建 CoroutineBuilder

    挂起函数 Suspend Function

    ViewModelKTX

    LifeCycleKTX

  • 相关阅读:
    RIP1 激酶抑制剂可应用于自身免疫性脑脊髓炎的治疗
    vue3中 | 使用Pinia 进行状态管理 | pinia优化重复请求
    软件杯 深度学习 python opencv 动物识别与检测
    【夯实算法基础】最近公共祖先
    技术学习:Python |欲先善其事,必先利其器(JSON)一
    UltraEdit2024免费版文本编辑器
    七.音视频编辑-创建视频过渡-应用
    HorizontalScrollView滚到当前tab,并且居中显示
    nginx-ingress多控制器部署
    携职教育:一般纳税人资格证明如何打印?
  • 原文地址:https://blog.csdn.net/HugMua/article/details/125594242