当前位置: 首页 > news >正文

Kotlin协程学习笔记

一、Kotlin协程简介

协程基于线程,是轻量级线程。在Android中,协程主要用于解决两个问题:

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

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

  • suspend:挂起或暂停,用于暂停执行当前的协程,并保存所有的局部变量。
  • resume:用于让已经暂停的协程从其暂停处继续执行。

挂起函数

使用suspend关键字修饰的函数叫做挂起函数。
挂起函数只能在协程体内或其它挂起函数内调用。

为什么Kotlin语法要求挂起函数一定要运行在协程体内或者其他挂起函数中呢?
答案就是,任何一个协程体或者挂起函数中都有一个隐含的Continuation实例,编译器能够对这个实例进行正确传递,并将这个细节隐藏在协程的背后,让我们的异步代码看起来像同步代码一样。协程,就是一个支持挂起和恢复的程序,而Kotlin协程是基于Continuation来实现挂起和恢复的。

调度器
所有的协程必须在调度器中运行,即使它们在主线程中运行也是如此。
在这里插入图片描述

  • Dispatchers.Main:Android上的主线程,用来处理UI交互和一些轻量级的任务:调用suspend函数,调用UI函数,更新LiveData。
  • Dispatchers.IO:非主线程,专为磁盘和网络IO进行了优化:数据库、文件读写、网络处理。
  • Dispatchers.Default:非主线程,专为CPU密集型任务进行了优化:数组排序、JSON数据解析、处理差异判断。

可以使用withContext切换调度器

suspend fun withContextFun(){Executors.newSingleThreadExecutor().asCoroutineDispatcher().use { dispatcher 

相关文章:

  • 无人机飞控运行在stm32上的RTOS实时操作系统上,而不是linux这种非实时操作系统的必要性
  • 微服务架构下数据库范式的失效与反范式设计的崛起
  • wps表格保存时提示上传错误报0XFFF40005错误,提示撤销之前操作或者另存为
  • JavaScript 渲染内容爬取:Puppeteer 入门
  • 线性DP:最短编辑距离
  • 2025.04.20【Lollipop】| Lollipop图绘制命令简介
  • 实验四 Java图形界面与事件处理
  • C++学习:六个月从基础到就业——内存管理:智能指针详解
  • 集成学习实际案例
  • 储能集装箱电池簇安装支架结构设计(大纲)
  • 代码随想录第22天:回溯算法4
  • 从规则到大模型:知识图谱信息抽取实体NER与关系RE任务近10年演进发展详解
  • 项目班——0419——functionbind生产消费(未完成)
  • 如何测试雷达与相机是否时间同步?
  • list的学习
  • Missashe考研日记-day23
  • 【数字图像处理】彩色图像处理(1)
  • Easysearch Rollup 相比 OpenSearch Rollup 的优势分析
  • 深入解析 Linux 文件系统中的软硬链接:从原理到实践
  • RS232 串行通信:C++ 实现指南
  • 马克思主义理论研究教学名师系列访谈|丁晓强:马克思主义学者要更关注社会现实的需要
  • A股三大股指涨跌互现:3343股收涨,两市成交超1.1万亿元
  • 屠呦呦当选美国科学院外籍院士
  • 中国公民在日本被机动车碾压身亡,我使馆发布提醒
  • “乐购浦东”消费券明起发放,多个商家同期推出折扣促销活动
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出