当前位置: 首页 > 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 
http://www.xdnf.cn/news/66871.html

相关文章:

  • OpenCV---图像预处理(四)
  • HCIE Datacom备考技巧
  • typedef MVS_API CLISTDEF0IDX(ViewScore, IIndex) ViewScoreArr;
  • 《解锁增强型上下文学习,打造你的专属智能助手》
  • 每天学一个 Linux 命令(29):tail
  • gnome中删除application中失效的图标
  • 齐次坐标系下的变换矩阵
  • 【图论 DFS BFS】P10725 [GESP202406 八级] 最远点对|普及+
  • LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南
  • LeetCode算法题(Go语言实现)_54
  • ubuntu--汉字、中文输入
  • iso文件在麒麟V10系统上安装达梦数据库
  • 基础服务系列-Jupyter Notebook 支持JavaScript
  • 【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计
  • 前端笔记-Vue3(上)
  • Spark-SQL 四(实验)
  • 显卡及相关大模型部署需求概述
  • 靠华为脱胎换骨,但赛力斯仍需要Plan B
  • 【Linux网络编程十】网络原理之IP协议【网络层】
  • 悬空引用和之道、之禅-《分析模式》漫谈57
  • SystemWeaver详解:从入门到精通的深度实战指南
  • css3新特性第五章(web字体)
  • 极狐GitLab Git LFS 速率限制如何设置?
  • mysql的binlog,redolog,undolog的区别
  • 安卓垂直进度条
  • 学习深度学习是否要先学习机器学习?工程师的路径选择策略
  • 部署Kimi-VL-A3B-Instruct视频推理
  • AgentGPT开源程序可以在浏览器中组装、配置和部署自主人工智能代理
  • FramePack:让视频生成更高效、更实用
  • 从0到1学习X-File-Storage:一站式文件存储解决方案