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

kotlin 协程方法总结

Kotlin 协程是一套强大的异步编程工具,以下是对 Kotlin 协程常用方法的总结:

1. 协程构建器

  • launch: 启动一个新的协程,不阻塞当前线程,返回一个 Job 对象。
GlobalScope.launch {
     // 协程体
 }
  • async: 启动一个新的协程并返回一个 Deferred 对象,可以用来获取协程的结果。
 val deferred = GlobalScope.async {
      // 协程体
      "Result"
  }
  val result = deferred.await() // 获取结果

2. 协程作用域

GlobalScope: 全局作用域,不受任何生命周期限制。

  GlobalScope.launch {
      // 协程体
  }
  • CoroutineScope: 自定义作用域,可以与特定的生命周期绑定。
  val scope = CoroutineScope(Dispatchers.Main)
  scope.launch {
      // 协程体
  }
  • lifecycleScope (Android): 与 Activity 或 Fragment 的生命周期绑定。
  lifecycleScope.launch {
      // 协程体
  }
  • viewModelScope (Android): 与 ViewModel 的生命周期绑定。
  viewModelScope.launch {
      // 协程体
  }

3. 协程调度器

Dispatchers.Main: 主线程调度器,用于 UI 操作。

  withContext(Dispatchers.Main) {
      // UI 操作
  }
  • Dispatchers.IO: I/O 调度器,用于 I/O 操作。
  withContext(Dispatchers.IO) {
      // I/O 操作
  }
  • Dispatchers.Default: 默认调度器,用于 CPU 密集型任务。
  withContext(Dispatchers.Default) {
      // CPU 密集型任务
  }
  • Dispatchers.Unconfined: 不受限调度器,不固定在任何线程上。
  withContext(Dispatchers.Unconfined) {
      // 不受限任务
  }

4. 挂起函数

suspend: 标记一个函数为挂起函数,可以在协程中使用。

  suspend fun fetchData(): String {
      // 异步操作
      return "Data"
  }
  • withContext: 在指定的调度器中执行代码块,并返回结果。
  val result = withContext(Dispatchers.IO) {
      // 异步操作
      "Data"
  }
  • delay: 挂起当前协程一段时间,不阻塞线程。
       delay(1000) // 挂起 1 秒

5. 协程控制

  • Job: 表示一个协程的执行状态,可以用来取消或等待协程。
 val job = GlobalScope.launch {
      // 协程体
  }
  job.cancel() // 取消协程
  job.join()   // 等待协程完成
  • CoroutineExceptionHandler: 处理协程中的未捕获异常。
 val handler = CoroutineExceptionHandler { _, exception ->
      Log.e("Coroutine", "Exception: ${exception.message}")
  }
  GlobalScope.launch(handler) {
      // 协程体
  }

6.并发控制

  • async + await: 并发执行多个任务并等待所有任务完成。
  val deferred1 = GlobalScope.async {
      // 任务 1
      "Result 1"
  }
  val deferred2 = GlobalScope.async {
      // 任务 2
      "Result 2"
  }
  val result1 = deferred1.await()
  val result2 = deferred2.await()
  • supervisorScope: 创建一个监督作用域,子协程的失败不会导致父协程取消。
  supervisorScope {
      val job1 = launch {
          // 任务 1
      }
      val job2 = launch {
          // 任务 2
      }
  }

7.测试

  • runBlocking: 用于测试协程,阻塞当前线程直到所有子协程完成。
  runBlocking {
      // 协程体
  }
  • TestCoroutineDispatcher: 用于单元测试的调度器。
  val testDispatcher = TestCoroutineDispatcher()
  runBlocking(testDispatcher) {
      // 协程体
  }

以上是 Kotlin 协程的一些常用方法和概念,希望对你有所帮助。


http://www.kler.cn/a/382896.html

相关文章:

  • Python数据可视化seaborn
  • AI笔筒操作说明及应用场景
  • 爱普生 SG–WriterⅡ 石英可编程手工烧录器
  • solidity call使用
  • “高效开发之路:用Spring MVC构建健壮的企业级应用”
  • git创建分支
  • 【动手学电机驱动】STM32-FOC(3)STM32 三路互补 PWM 输出
  • 【MySQL系列】字符集设置
  • 搜维尔科技:Xsens和BoB助力生物力学教育
  • 是时候用开源降低AI落地门槛了
  • 洛科威岩棉板凭借多重优势,在工业管道保温领域大放异彩
  • 通宵修bug
  • 空间解析几何6:空间圆柱体的离散化表示【附MATLAB代码】
  • 封装axios、环境变量、api解耦、解决跨域、全局组件注入
  • 根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题
  • 修改elementUI等UI组件样式的5种方法总结,哪些情况需要使用/deep/, :deep()等方式来穿透方法大全
  • 职业院校关于大数据、云计算和物联网传感器技术的结合与应用探讨
  • Ansys Zemax | 手机镜头设计 - 第 4 部分:用LS-DYNA进行冲击性能分析
  • 淘宝商品详情API接口Java GET调用指南
  • 【鉴权】深入解析OAuth 2.0:访问令牌与刷新令牌的安全管理
  • Vue Router进阶详解
  • andrular输入框input监听值传递
  • OpenSSL 生成根证书、中间证书和网站证书
  • 1分钟解决Excel打开CSV文件出现乱码问题
  • B站的视频下载的视频是mkv格式,怎么通过ffimage转化为mp4的格式
  • 【Python】Bottle:轻量Web框架