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

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

  • 相关阅读:
    在云服务器上安装VNC远程桌面服务
    C++ 炼气期之变量的生命周期和作用域
    Python图形复刻——绘制母亲节花束
    鸿蒙自定义DrawerLayout侧滑菜单实现原理
    python案例:六大主流小说平台小说下载
    2023年厦门市高等职业院校技能竞赛软件测试竞赛规程
    转债打新监听
    mqttws.js
    Docker Stack部署应用详解+Tomcat项目部署详细实战
    pycharm 让控制台里的链接可以点击
  • 原文地址:https://blog.csdn.net/micro9981/article/details/139456080