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

Kotlin中协程的管理

Jetpack Compose 里,协程的生命周期管理要跟 UI 的生命周期 绑定,否则很容易出现 页面退出后协程还在跑 的情况。常见的做法有以下几种:

1.使用LaunchedEffect

LaunchedEffect会跟随Composable的生命周期。退出页面时会自动取消里面的协程。

@Composable
fun MyScreen() {LaunchedEffect(Unit) {// 这里的协程会随着页面退出而自动取消repeat(10) {delay(1000)println("tick $it")}}
}

页面销毁 / Composable 移除时,LaunchedEffect 内部的协程会被自动取消。

2.使用 rememberCoroutineScope(需要手动控制)

rememberCoroutineScope() 会创建一个作用域,跟随 Composable 的生命周期。如果你需要手动取消,可以这样:

@Composable
fun MyScreen() {val scope = rememberCoroutineScope()DisposableEffect(Unit) {onDispose {// 页面销毁时 scope 自动取消scope.cancel()}}Button(onClick = {scope.launch {delay(3000)println("task done")}}) {Text("Start Task")}
}

3.使用ViewModelScope(推荐用于业务逻辑)

如果协程任务是跟页面数据逻辑相关而不是纯UI,可以放在ViewModel里,利用ViewModelScope。ViewModel被销毁时,协程自动取消:

class MyViewModel : ViewModel() {fun startJob() {viewModelScope.launch {delay(5000)println("done")}}
}@Composable
fun MyScreen(viewModel: MyViewModel = viewModel()) {Button(onClick = { viewModel.startJob() }) {Text("Start")}
}

总结

  • UI 短任务 → 用 LaunchedEffect,退出页面自动取消。

  • 需要手动控制 → 用 rememberCoroutineScope + DisposableEffect

  • 业务逻辑任务 → 放在 ViewModel 里,用 viewModelScope,生命周期跟 ViewModel 走。

http://www.dtcms.com/a/388904.html

相关文章:

  • django如何自己写一个登录时效验证中间件
  • 【大前端++】初始技术栈跨平台方案Electron+Vue,MacOS开发环境搭建【十分钟一个Demo】
  • 限时起售价17.38万元,吉利银河M9上市
  • Vue : defineModel()
  • 一套基于Java+Vue+UniApp开发的同城配送系统
  • Vue 3 手机外观组件库
  • 部署分布式CephFS,存储的服务器的最低配置
  • 【Spring AI】Ollama大模型-智能对话实现+项目实战(Spring Boot + Vue)
  • Vue 3 实战:GIS 系统模块化设计与多功能融合方案
  • Docker多容器编排:Compose 实战教程——从入门到精通
  • Vue2 基础知识点一:数据绑定 (Data Binding)
  • layui tree组件回显bug问题,父级元素选中导致子集全部选中
  • centos7上使用Docker+ RagFlow + ollama + 数据集 搭建自己的AI问答机器人(2025-09)
  • # 从 Gymnasium 到 Minari:新一代机器人强化学习工具链全指南
  • 系统架构设计师备考第27天——基于构件的软件工程
  • Centos下安装docker
  • OpenAPI 规范:构建高效 RESTful API 指南
  • 基于 AForge.NET 的 C# 人脸识别
  • SQLite与ORM技术解析
  • vue动态时间轴:交互式播放与进度控制
  • Java I/O三剑客:BIO vs NIO vs AIO 终极对决
  • AI 在视频会议防诈骗方面的应用
  • nest.js集成服务端渲染(SSR)
  • AI如何“听懂人话”?从语音识别到语义理解的最后一公里
  • 鸿蒙:Preferences持久化实现方案
  • 常温超导新突破!NixCu-O7材料设计引领能源革命(续)
  • 常温超导新突破!NixCu-O7材料设计引领能源革命
  • C++,C#,Rust,Go,Java,Python,JavaScript的性能对比
  • 《从崩溃到精通:C++ 内存管理避坑指南,详解自定义类型 new/delete 调用构造 / 析构的关键逻辑》
  • 鸿蒙:父组件调用子组件的三种方案