Android Kotlin 协程作用域执行特性

Kotlin 协程作用域是指协程所拥有的生命周期和可见范围。它决定了协程内部可以访问哪些变量和执行哪些操作。

协程作用域的主要作用是对协程进行管理和控制。它可以用来设置协程的上下文,包括调度器和异常处理器等。在协程作用域内,可以启动子协程,等待子协程完成,以及进行协程之间的通信和协调。通过协程作用域,可以更好地组织和管理协程的执行,提供更好的代码结构和可维护性。


在 Android 开发中,常用的作用域:

CoroutineScope:

CoroutineScope 是一个通用的协程作用域接口,可以用于创建自定义的协程作用域。CoroutineScope 它可以在任何合适的地方创建,例如顶层函数、类的范围以及其他自定义组件中。它不具有生命周期感知性质,需要手动管理协程的启动和取消。

lifecycleScope:

lifecycleScope 是一种 CoroutineScope,它是基于 Activity 或 Fragment 的生命周期的,可以创建与它们的生命周期一致的协程作用域。lifecycleScope 可以通过使用 Kotlin 标准库中的 lifecycle-runtime-ktx 库来获取,它提供了在 Activity 或 Fragment 中方便创建 lifecycleScope 的扩展函数。

ViewModelScope:

ViewModelScope 是一种 CoroutineScope,用于在 ViewModel 中创建协程作用域,其生命周期与 ViewModel 的生命周期相对应。ViewModel是一个生命周期感知的组件,它可以在配置更改时保持数据的一致性,并且可以在 Activity 或 Fragment 重新创建时持有数据。


在实际上手协程来做异步开发时,需要了解到协程作用域的执行特性:

以 Activity 的 lifecycleScope 举例:

Kotlin 复制代码
class MainActivity: AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycleScope.launch { // 不指定调度器,默认是在主线程上运行
            Log.i(TAG, "start") // 主线程

            withContext(Dispatchers.IO) {
                delay(1000)
                Log.i(TAG, "延迟1秒后") // 异步线程
            }

            Log.i(TAG, "middle") // 主线程

            withContext(Dispatchers.IO) {
                delay(2000)
                Log.i(TAG, "延迟2秒后") // 异步线程
            }

            Log.i(TAG, "end") // 主线程
        }
        Log.i(TAG, "协程作用域外")
    }
}

打印出来的结果:

Kotlin 复制代码
 I  start
 I  协程作用域外
 I  延迟1秒后
 I  middle
 I  延迟2秒后
 I  end

首先开启了一个协程的作用域 lifecycleScope,打印了 start,切换了调度器(IO),打印了协程作用域外,接着就按照作用域内的顺序执行


总结:在协程作用域内,无论调度器如何切换,里面的逻辑都会顺序执行,一旦遇到异步的调度器Dispatchers.IO 或者 Dispatchers.Default),当前作用域就会挂起继续执行作用域之后的代码逻辑

相关推荐
小白学大数据1 小时前
高级技术文章:使用 Kotlin 和 Unirest 构建高效的 Facebook 图像爬虫
爬虫·数据分析·kotlin
丘狸尾2 小时前
[cisco 模拟器] ftp服务器配置
android·运维·服务器
van叶~4 小时前
探索未来编程:仓颉语言的优雅设计与无限可能
android·java·数据库·仓颉
Crossoads8 小时前
【汇编语言】端口 —— 「从端口到时间:一文了解CMOS RAM与汇编指令的交汇」
android·java·汇编·深度学习·网络协议·机器学习·汇编语言
li_liuliu9 小时前
Android4.4 在系统中添加自己的System Service
android
guitarjoy9 小时前
Kotlin - 协程结构化并发Structured Concurrency
kotlin·协程·coroutinescope·结构化同步
C4rpeDime11 小时前
自建MD5解密平台-续
android
鲤籽鲲13 小时前
C# Random 随机数 全面解析
android·java·c#
m0_5485147716 小时前
2024.12.10——攻防世界Web_php_include
android·前端·php
凤邪摩羯17 小时前
Android-性能优化-03-启动优化-启动耗时
android