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

Android里的协程( Coroutine)理解

协程是Android采用的实现并发的一种方式,对于用户来说它可以理解为一个特殊的代码块,它使用看起来是串行的编程方式,实现程序并行,你不再需要考虑底层的线程、回调等东西,框架来帮你解决。

你需要记住的仅仅是,协程内的代码块是串行执行的(当然,又嵌套了子协程除外)。协程与它的调用者是并行进行的(所谓的不阻塞调用者)。当然,你也可以强制阻塞调用者,方法是在协程外部的语句中强制使用该协程的await函数。

协程有一个所属作用域范围(scope),它只在该范围有效时运行,范围没了,即使协程还在运行,也要杀死。一般有三种范围(GlobalScope、lifecycleScope、viewModelScope),GlobalScope作用域是app级的,app不死该范围不死、里面的协程也就不死。lifecycleScope是有生存期概念的对象所在作用域,比如activity、fregment,他们都具备lifecycleScope的特性,协程可以在这些作用域中运行。还有viewModelScope,它是后台viewModel对象自带的作用域。Android为了防止内存泄漏,引入了作用域,所有的变量和程序,都依附于特定的作用域,协程也不例外。另外,还有一个特定的调用协程的关键词runBlocking,它调用的协程会阻塞调用者,也就是说其实就是和调用者完全串行进行了,不再是协程了。

还有,用户可以指定协程在哪类线程上执行。线程分为三类:Default、Main、IO。Main类线程用于操作主界面,IO类线程用于访问磁盘、网络等操作。同一个协程,用户可以动态指定在不同线程上运行,比如在IO线程上访问网络,获得一个字符串,然后切换到Main线程,显示在界面中。

总之,协程只是特殊的代码块,块内串行、块间并行。协程依附于特定的作用域。协程可以动态调度到不同线程上执行。


http://www.kler.cn/a/374618.html

相关文章:

  • 数据库管理系统的ACID都各自是什么?
  • 【Stable Diffusion】
  • javascript实现rsa算法(支持微信小程序)
  • 操作数据库的API
  • Docker 部署 Jaeger
  • 缓存使用的最佳实践,自定义缓存工具类
  • 快速上手机器学习-朴素贝叶斯
  • .NET Core WebApi第7讲:项目的发布与部署
  • opencv训练识别狗的分类器数据集
  • 3D人体建模的前沿探索:细数主流模型与技术进展
  • haue数据库原理第一次实验
  • ES6面试题:(第三天)
  • vscode 安装教程
  • Python 变量在函数中的作用域
  • 富格林:拆穿欺诈套路平稳出金
  • 「C/C++」C++ 之 随机数生成
  • Android 利用责任链模式来实现 解析不同的json对象
  • 【C++】多态(万字详细总结)
  • STM32中独立看门狗(IWDG)与窗口看门狗(WWDG)设计及时间计算
  • 2024年大湾区杯粤港澳金融数学建模B题超详细解题代码+数据集分享+问题一代码分享
  • AI做怀旧视频,自媒体轻松涨粉变现1w+!
  • qt QCheckBox详解
  • 数据结构分类
  • 合理利用IPIDEA代理IP,优化数据采集效率!
  • 掌握DFMEA,让潜在设计缺陷无处遁形!
  • 单细胞数据分析(二):harmony算法整合数据