前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin 协程】协程的挂起和恢复 ② ( 协程挂起 和 线程阻塞 对比 )

【Kotlin 协程】协程的挂起和恢复 ② ( 协程挂起 和 线程阻塞 对比 )

作者头像
韩曙亮
发布2023-03-30 18:04:53
1.7K0
发布2023-03-30 18:04:53
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、协程挂起 和 线程阻塞 对比


挂起是协程中的概念 , 只能在协程中使用 ;

阻塞是线程中的概念 , 可以在主线程和子线程中使用 ;

1、协程挂起

协程 挂起 操作 : 在协程中使用 delay 函数 , 挂起 20 秒时间 , 然后 20 秒后更新 UI ; delay 函数是 挂起 suspend 函数 ;

代码语言:javascript
复制
// 创建协程
GlobalScope.launch(Dispatchers.Main) {
    delay(20000)
    // 主线程更新 UI
    Log.i("MainActivity", "GlobalScope : 主线程更新 UI")
}

2、线程阻塞

主线程 阻塞 操作 : 在主线程 中使用 Thread.sleep 函数 , 阻塞 20 秒时间 , 然后 20 秒后更新 UI ;

代码语言:javascript
复制
// 主线程阻塞
Thread.sleep(20000)
// 主线程更新 UI
Log.i("MainActivity", "GlobalScope : 主线程更新 UI")

3、挂起和阻塞对 UI 的影响

协程 挂起 操作 不会出现 阻塞 UI 刷新的情况 , 挂起的 20 秒不影响 UI 刷新显示 ;

但是如果将主线程阻塞 , UI 不再刷新 , 会出现 ANR 崩溃异常 ;

图形化 GUI 系统中 , 一般都在主线程中更新 UI , 主线程中都有一个无限循环 , 不断刷新界面 , 如果在主线程中执行了耗时操作 , 就会影响到界面的刷新 , 出现漏帧 , ANR 崩溃异常 ;

4、挂起分析

协程中有挂起操作 , 会将挂起点的状态保存 , 同时协程停止执行 , 等待挂起函数执行完毕后 , 协程继续执行 ; 相当于阻塞的是协程 , 不会阻塞主线程 ;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、协程挂起 和 线程阻塞 对比
    • 1、协程挂起
      • 2、线程阻塞
        • 3、挂起和阻塞对 UI 的影响
          • 4、挂起分析
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档