Kotlin中协程理解与实战(一)

  • 什么是协程
  • 在Android中协程用来解决什么问题
  • 协程是:
    • suspend -也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;
    • resume -用于让已暂停的协程从其暂停处继续执行
  • 挂起函数
  • 调度器
    • -Dispatchers.Main
    • -Dispatchers.IO
    • -Dispatchers.Default
  • 协程的两部分
  • Kotlind的协程实现分为两个层次
  • 任务泄漏
  • 结构化并发
  • CoroutinScope
    • 一.定义协程必须指定其CoroutineScope.它会跟踪所有协程,同样它还可以取消由它所启动的所有协程。
    • 二.常用的相关API有:
  • 协程的启动与取消

什么是协程

协程基于线程,它是轻量级线程

在Android中协程用来解决什么问题

1.处理耗时操作,这种任务常常会阻塞主线程。
2.保证主线程安全,即确保安全地从主线程调用任何suspend函数。

协程是:

协程让异步逻辑同步化,杜绝回调地狱。
协程最核心的点就是,函数或者一段程序就能够被挂起,稍后再在挂起的位置恢复。
#协程的挂起与恢复
常规函数基础操作包括:invoke(或call)和return,协程新增了suspend和resume:

suspend -也称为挂起或暂停,用于暂停执行当前协程,并保存所有局部变量;

resume -用于让已暂停的协程从其暂停处继续执行

挂起函数

1.使用suspend关键字修饰的函数叫作挂起函数。
2.挂起函数只能在协程体内或其他挂起函数内调用

调度器

所有协程必须在调度器中运行,即使它们在主线程上运行也是如此

-Dispatchers.Main

Android 上的主线程, 用来处理UI交互和一些轻量级任务,
调用suspend函数
调用UI函数
更新LiveData

-Dispatchers.IO

非主线程,专为磁盘和网络IO进行优化
调用suspend函数
调用UI函数
更新LiveData

-Dispatchers.Default

非主线程,专为CPU密集型任务进行了优化
数组排序
JSON数据解析
处理差异判断

协程的两部分

Kotlind的协程实现分为两个层次

1.基础设施层,标准库的协程API,主要对协程提供了概念和语义上最基本的支持
2.业务框架层,协程的上层框架支持

任务泄漏

1.当某个协程任务丢失,无法追踪,会导致内存、CPU、磁盘等资源浪费,甚至发送一个无用的网络请求,这种情况称为任务泄漏。
2.为了能够避免协程泄漏,Kotlin引入了结构化并发机制。

结构化并发

使用结构化并发可以做到:
1.取消任务,当某项任务不再需要时取消它。
2.追踪任务,当任务正在执行时,追踪它。
3.发出错误信号,当协程失败时,发出错误信号表明有错误发生。

CoroutinScope

一.定义协程必须指定其CoroutineScope.它会跟踪所有协程,同样它还可以取消由它所启动的所有协程。

二.常用的相关API有:

1.GlobalScope,生命周期是process级别的,即使Activity或者Fragment已经被销毁,协程仍然在执行。
2.MainScope,在Activity中使用,可以在onDestroy()中取消协程。
3.viewModelScope,只能在ViewModel中使用,绑定ViewModel的生命周期。
4.lifecycleScope,只能在Activity、Fragment中使用,会绑定Activity和Fragment的生命周期。

协程的启动与取消

1.启动协程:启动构建器,启动模式,作用域构建器,Job的生命周期
2.取消协程:协程的取消,CPU密集型任务取消,协程取消的副作用,超时任务

Kotlin中协程理解与实战(一)相关推荐

  1. 串行和并行的区别_入门参考:从Go中的协程理解串行和并行

    本文转自公众号语言随笔,欢迎关注 入门参考:从Go中的协程理解串行和并行​mp.weixin.qq.com Go语言的设计亮点之一就是原生实现了协程,并优化了协程的使用方式.使得用Go来处理高并发问题 ...

  2. 十一、kotlin的协程(一)

    theme: Chinese-red 学习的前提 java线程需要大概知道点 协程是线程执行的任务, 协程和用户线程的区别在于, 协程背靠强大的编译器, 协程有专属于协程的调度器和一堆方便好用的函数, ...

  3. 【对比Java学Kotlin】协程简史

    文章目录 一.概念释义 1.1 协程定义 1.2 与线程的关系 1.3 协程简史 二.种类划分 2.1 按调用栈分类 2.2 按调度方式分类 三.异步编程 3.1 多线程 3.2 回调 3.3 Pro ...

  4. kotlin coroutines 协程教程-入门用法

    kotlin coroutines 协程教程-入门用法 Coroutine 协程,是kotlin 上的一个轻量级的线程库,对比 java 的 Executor,主要有以下特点: 更轻量级的 api 实 ...

  5. Go中协程间通信的方式Sync.Cond

    在Go中协程间通信的方式有多种,最常用的是channel.如果牵扯多个协程的通知,可以使用sync.Cond. 1. 程序中的通信方式 GO语言中有句名言:"不要用共享内存来通信,而是使用通 ...

  6. Kotlin的协程与生命周期

    文章目录 一.前言 二.引入依赖 三.代码示例 1.基础用法 2.repeatOnLifecycle 3.flowWithLifecycle 4.lifecycle.whenCreated.lifec ...

  7. Kotlin高级协程

    Kotlin高级协程 一.前言 二.先从线程说起 三.协程的设计思想 四.协程特点:优雅的实现移步任务 五.协程基本使用 六.协程和线程相比有什么特点,如何优雅的实现异步任务 一.前言 在文章正式上干 ...

  8. 【Python】【入门篇】十二、Python中协程

    目录 十二.Python中协程 12.1 协程的定义 12.2 协程 12.3 协程池 12.4 总结 十二.Python中协程 12.1 协程的定义 协程(Coroutine):是一种比线程更加轻量 ...

  9. Kotlin(3)-协程和操作符重载,Java程序员秋招三面蚂蚁金服

    Kotlin 文件和类不存在一对一关系 共生体 继承 修饰符 空指针问题 正文 重难点 协程 想了很久,关于协程的内容,在官网上确实有很多内容,基础知识概念,基本使用,以及 流操作,通道,异常处理,并 ...

最新文章

  1. 解题报告(二)B、(P3338 [ZJOI2014])力(FFT经典套路)(2)
  2. Dalvik VM进程系统(二):分析Zygote的启动过程
  3. 在Python中检查类型的规范方法是什么?
  4. 云大计算机基础,2019云南大学计算机技术专硕上岸经验
  5. spring一: 容器以及bean生命周期
  6. iframe嵌入页面白屏_封闭在家学网页制作!为页面嵌入PDF文件——零基础自学网页制作
  7. elementui中tabs切换item中的内容会变_中后台UX优化之道
  8. 前端学习(237):IE条件注释法
  9. Android学习笔记---10_对应用进行单元测试
  10. SharpMap在web上的应用
  11. 算法笔记-------基数排序
  12. QQ输入法怎么设置快捷短语
  13. 语义分割网络-Segnet
  14. Win10系统SAS9.4安装步骤
  15. 使用快捷指令高德导航(高德地图)
  16. 一份Python面试宝典
  17. 计算机毕业设计源代码 javaSSM274基于VUE酒店客房管理系统 论文答辩ppt
  18. elementUI时间日期组件设置的默认时间在ie中无法重置
  19. 二值形态学之击中击不中变换
  20. 观点 | ​苏宁传统零售业“数字化转型”经验分享

热门文章

  1. 开源发票识别_自由职业者和小型企业的前4种开源发票工具
  2. 「数据库选型」抛弃MongoDB,拥抱PostgreSQL,工作更轻松
  3. 苹果库乐队怎么玩_苹果安卓手机最简单换铃声方法,无需电脑,简单一步就能换成流行歌曲...
  4. 人人网开放平台推出Live Stream Box,为视频直播带来社会化属性!
  5. 应用机器学习(三):朴素贝叶斯分类器
  6. Android SurfaceView实战 打造抽奖转盘
  7. 什么是人工智能?人工智能的本质是什么?
  8. java后台jd_2017春季_京东_Java后端研发岗面经
  9. 个人第一篇博客——自我介绍
  10. 互动媒体技术作业——十二个“一”扩展版