• Kotlin协程中的作用域 `GlobalScope`、`lifecycleScope` 和 `viewModelScope`


    Kotlin协程中的作用域

    Kotlin协程提供了多种作用域来管理协程的生命周期,其中最常见的是 GlobalScopelifecycleScopeviewModelScope

    1. GlobalScope

    GlobalScope 是一个全局作用域,不受任何其他生命周期的限制。这意味着在 GlobalScope 中启动的协程会一直运行,直到显式地取消或应用程序进程终止。

    用法:

    GlobalScope.launch {
        // 在这里启动的协程会一直运行
    }
    

    适用场景:

    • 需要全局运行的协程,例如应用程序初始化或网络请求。
    • 需要在应用程序整个生命周期中都运行的后台任务。

    注意事项:

    • 不建议在 GlobalScope 中启动大量耗时任务,因为这可能会导致应用程序性能问题。

    2. lifecycleScope

    lifecycleScope 与 Activity 或 Fragment 的生命周期绑定。当 Activity 或 Fragment 创建时,lifecycleScope 就创建了,当 Activity 或 Fragment 销毁时,lifecycleScope 也会销毁。这意味着在 lifecycleScope 中启动的协程会随着 Activity 或 Fragment 的生命周期自动终止,避免内存泄漏。

    用法:

    lifecycleScope.launch {
        // 在这里启动的协程会随着 Activity 或 Fragment 的生命周期自动终止
    }
    

    适用场景:

    • 在 Activity 或 Fragment 中执行与 UI 相关的后台任务。
    • 需要在 Activity 或 Fragment 的生命周期内完成的后台任务。

    3. viewModelScope

    viewModelScopeViewModel 绑定,与 ViewModel 的生命周期一致。当 ViewModel 创建时,viewModelScope 就创建了,当 ViewModel 销毁时,viewModelScope 也会销毁。这意味着在 viewModelScope 中启动的协程会随着 ViewModel 的生命周期自动终止,避免内存泄漏。

    用法:

    viewModelScope.launch {
        // 在这里启动的协程会随着 ViewModel 的生命周期自动终止
    }
    

    适用场景:

    • ViewModel 中执行与 UI 无关的后台任务。
    • 需要在 ViewModel 的生命周期内完成的后台任务。

    总结

    作用域生命周期用法示例适用场景注意事项
    GlobalScope全局GlobalScope.launch { ... }需要全局运行的协程不建议启动大量耗时任务
    lifecycleScopeActivity/FragmentlifecycleScope.launch { ... }与 UI 相关的后台任务-
    viewModelScopeViewModelviewModelScope.launch { ... }与 UI 无关的后台任务-

    选择合适的协程作用域可以帮助你避免内存泄漏,并使你的代码更加清晰易懂。
    联系我

  • 相关阅读:
    什么是缓存雪崩?服务器雪崩的场景与解决方案
    【嵌入式开发】UART
    矩阵分析与应用(23)
    python爬虫大作业爬取豆豆影评
    Matlab
    一文学会线程池、任务调度的使用
    和我一起学习自动化运维
    在全新ubuntu上用gpu训练paddleocr模型遇到的坑与解决办法
    ASAN入门参考
    GLSL ES着色器 精度限定字
  • 原文地址:https://blog.csdn.net/micro9981/article/details/139456080