Kotlin中协程理解与实战(一)
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中协程理解与实战(一)相关推荐
- 串行和并行的区别_入门参考:从Go中的协程理解串行和并行
本文转自公众号语言随笔,欢迎关注 入门参考:从Go中的协程理解串行和并行mp.weixin.qq.com Go语言的设计亮点之一就是原生实现了协程,并优化了协程的使用方式.使得用Go来处理高并发问题 ...
- 十一、kotlin的协程(一)
theme: Chinese-red 学习的前提 java线程需要大概知道点 协程是线程执行的任务, 协程和用户线程的区别在于, 协程背靠强大的编译器, 协程有专属于协程的调度器和一堆方便好用的函数, ...
- 【对比Java学Kotlin】协程简史
文章目录 一.概念释义 1.1 协程定义 1.2 与线程的关系 1.3 协程简史 二.种类划分 2.1 按调用栈分类 2.2 按调度方式分类 三.异步编程 3.1 多线程 3.2 回调 3.3 Pro ...
- kotlin coroutines 协程教程-入门用法
kotlin coroutines 协程教程-入门用法 Coroutine 协程,是kotlin 上的一个轻量级的线程库,对比 java 的 Executor,主要有以下特点: 更轻量级的 api 实 ...
- Go中协程间通信的方式Sync.Cond
在Go中协程间通信的方式有多种,最常用的是channel.如果牵扯多个协程的通知,可以使用sync.Cond. 1. 程序中的通信方式 GO语言中有句名言:"不要用共享内存来通信,而是使用通 ...
- Kotlin的协程与生命周期
文章目录 一.前言 二.引入依赖 三.代码示例 1.基础用法 2.repeatOnLifecycle 3.flowWithLifecycle 4.lifecycle.whenCreated.lifec ...
- Kotlin高级协程
Kotlin高级协程 一.前言 二.先从线程说起 三.协程的设计思想 四.协程特点:优雅的实现移步任务 五.协程基本使用 六.协程和线程相比有什么特点,如何优雅的实现异步任务 一.前言 在文章正式上干 ...
- 【Python】【入门篇】十二、Python中协程
目录 十二.Python中协程 12.1 协程的定义 12.2 协程 12.3 协程池 12.4 总结 十二.Python中协程 12.1 协程的定义 协程(Coroutine):是一种比线程更加轻量 ...
- Kotlin(3)-协程和操作符重载,Java程序员秋招三面蚂蚁金服
Kotlin 文件和类不存在一对一关系 共生体 继承 修饰符 空指针问题 正文 重难点 协程 想了很久,关于协程的内容,在官网上确实有很多内容,基础知识概念,基本使用,以及 流操作,通道,异常处理,并 ...
最新文章
- 解题报告(二)B、(P3338 [ZJOI2014])力(FFT经典套路)(2)
- Dalvik VM进程系统(二):分析Zygote的启动过程
- 在Python中检查类型的规范方法是什么?
- 云大计算机基础,2019云南大学计算机技术专硕上岸经验
- spring一: 容器以及bean生命周期
- iframe嵌入页面白屏_封闭在家学网页制作!为页面嵌入PDF文件——零基础自学网页制作
- elementui中tabs切换item中的内容会变_中后台UX优化之道
- 前端学习(237):IE条件注释法
- Android学习笔记---10_对应用进行单元测试
- SharpMap在web上的应用
- 算法笔记-------基数排序
- QQ输入法怎么设置快捷短语
- 语义分割网络-Segnet
- Win10系统SAS9.4安装步骤
- 使用快捷指令高德导航(高德地图)
- 一份Python面试宝典
- 计算机毕业设计源代码 javaSSM274基于VUE酒店客房管理系统 论文答辩ppt
- elementUI时间日期组件设置的默认时间在ie中无法重置
- 二值形态学之击中击不中变换
- 观点 | ​苏宁传统零售业“数字化转型”经验分享
热门文章
- 开源发票识别_自由职业者和小型企业的前4种开源发票工具
- 「数据库选型」抛弃MongoDB,拥抱PostgreSQL,工作更轻松
- 苹果库乐队怎么玩_苹果安卓手机最简单换铃声方法,无需电脑,简单一步就能换成流行歌曲...
- 人人网开放平台推出Live Stream Box,为视频直播带来社会化属性!
- 应用机器学习(三):朴素贝叶斯分类器
- Android SurfaceView实战 打造抽奖转盘
- 什么是人工智能?人工智能的本质是什么?
- java后台jd_2017春季_京东_Java后端研发岗面经
- 个人第一篇博客——自我介绍
- 互动媒体技术作业——十二个“一”扩展版