• 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 无关的后台任务-

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

  • 相关阅读:
    Java并发编程学习六:阻塞队列
    SpringMVC-18-异常机制
    在外包干了三年,我废了……不吹不黑!
    淘宝/天猫添加收货地址 API
    通过逻辑回归和感知器算法对乳腺癌数据集breastCancer和鸢尾花数据集iris进行线性分类
    ES可视化工具--ElasticHD--下载、安装、使用
    Kali存储扩展
    Eth - Trunk链路聚合
    Windows性能监视器使用说明
    543、RabbitMQ详细入门教程系列 -【Confirm与Mandatory】 2022.09.05
  • 原文地址:https://blog.csdn.net/micro9981/article/details/139456080