Kotlin 协程 supervisorScope {} 运行崩溃解决

这篇具有很好参考价值的文章主要介绍了Kotlin 协程 supervisorScope {} 运行崩溃解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

简单介绍supervisorScope函数,它用于创建一个使用了 SupervisorJob 的 coroutineScope,
该作用域的特点:抛出的异常,不会 连锁取消 同级协程和父协程。

看过很多 supervisorScope {} 文档的使用,我照抄一摸一样的代码,运行就崩溃,最后找到了解决方法,应该是kotlin版本更新做过改动,当前我使用的是 androidx.core:core-ktx:1.9.0

解决方法

需要将CoroutineExceptionHandler,作为参数,才有效果,不然会崩溃。文章来源地址https://www.toymoban.com/news/detail-823952.html

    private fun test() {

        // 原来的写法,现在会崩溃
//        runBlocking {
//            Log.d("TAG", "Start")
//            launch {
//                delay(100)
//                Log.d("TAG", "Task from runBlocking")
//            }
//            supervisorScope {
//                val firstChild = launch {
//                    Log.d("TAG", "First Child")
//                    throw AssertionError("First child is cancelled")
//                }
//                val secondChild = launch {
//                    Log.d("TAG", "Second Child")
//                }
//                Log.d("TAG", "Cancelling supervisor")
//            }
//            Log.d("TAG", "End")
//        }


        // 最新的写法
        runBlocking {
            Log.d("TAG", "Start")
            launch {
                delay(100)
                Log.d("TAG", "Task from runBlocking")
            }
            supervisorScope {
                // 需要将CoroutineExceptionHandler,作为参数,才有效果,不然会崩溃
                val firstChild = launch(CoroutineExceptionHandler { _, _ -> }) {
                    Log.d("TAG", "First Child")
                    throw AssertionError("First child is cancelled")
                }
                val secondChild = launch {
                    Log.d("TAG", "Second Child")
                }
                Log.d("TAG", "Cancelling supervisor")
            }
            Log.d("TAG", "End")
        }

    }

到了这里,关于Kotlin 协程 supervisorScope {} 运行崩溃解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android初学之android studio运行java/kotlin程序

    第一步骤: File — New — New Module ,然后弹出一个框,(左边)选择 Java or Kotlin Library ,(右边)编辑自己的图书馆名、包名、类名,选择 Java 一个语言,然后 Finish 如下图: 然后,就可以看见我新建的 java Library 了,如下图: 第二步骤:马上写个测试程序 看看能不能运行

    2024年02月11日
    浏览(40)
  • Kotlin协程runBlocking并发launch,Semaphore同步1个launch任务运行

              需要注意,由于Kotlin与Java语言特性的细微差异,虽然同为Semaphore,上述代码如果引入的是 java.util.concurrent.Semaphore ,功能也能正常完成,但运行出来的结果会有小差异。Java版Semaphore会使某条线程较长时间独占CPU轮片,然后再让渡出去CPU,输出的表现就是A或B或C一

    2024年02月11日
    浏览(28)
  • 解决kotlin写Android项目编译报Execution failed for task ‘:app:kaptDebugKotlin‘.异常

    解决kotlin写Android项目编译报Execution failed for task ‘:app:kaptDebugKotlin‘.异常 遇到的报错标题也是app:kaptDebugKotlin,具体报错信息不是,也可以试一下这个方法。 尝试办法:将kapt改为annotationProcesser,并同步项目 ,我的项目使用了databinding和arouter,原本是这样引入的: 上面这样写

    2024年02月05日
    浏览(37)
  • Android Studio 下载kotlin-compiler-embeddable-1.8.0.jar慢的解决办法

    一、前往以下官网: https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.8.0/ 做两件事         1. 下载jar包,用你的迅雷、fdm anyway。         2. 记录对应jar包的sha1 ,即直接浏览器打开https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.8.

    2024年02月12日
    浏览(46)
  • Android崩溃日志获取方式

    在日常测试安卓的app时,经常会遇到崩溃问题,于是经常需要获取崩溃日志。 一、通过adb logcat获取 二、通过Android Studio 三、通过adb shell dumpsys dropbox命令获取 四、获取ANR日志​​​​​​​ 常见异常​​​​​​​ 欢迎关注我的公众号【测试开发备忘录】,一起沟通交流~

    2024年02月11日
    浏览(38)
  • 分析Unity崩溃日志(Android)

    Unity版本: 这里Unity版本是Unity 2019.4.30f1 崩溃信息: 错误信息如下: 关键信息解释: 注意关键信息’arm64-v8a’ ABI: ‘arm64’ 这里是指arm64的崩溃,需要找arm64-v8a的符号表,其它符号表按照次逻辑查找。 libil2cpp指libil2cpp.sym.so文件 libunity指libunity.sym.so文件 so文件位置: 有两种获

    2024年01月20日
    浏览(28)
  • Android协程

    在介绍协程之前我们先了解几个概念 在操作系统中我们曾经学到过 并发 与 并行 并发是 同一个时刻 只有 一条指令在执行 ,其他指令没有再执行,但是由于CPU的时间片特别短,导致 多个指令来回切换的时间间隔特别短 ,就好像是同一时间 多条指令在执行 。 单核CPU与多核CPU 都可

    2024年02月12日
    浏览(28)
  • Android 性能优化系列:崩溃原因及捕获

    在日常开发中崩溃是我们遇到的很常见的情况,可能是 NullPointerException、IllegalArgumentException 等等,当应用程序抛出这些我们未捕获的异常时,紧跟着的是应用的崩溃,进程被杀死并退出。 或许你到现在都一直认为是因为抛出了异常,所以才会导致的进程被杀死并退出,认为

    2024年02月11日
    浏览(35)
  • 通过Android Logcat分析firebase崩溃

    参考:UnityIL2CPP包Crash闪退利用Android Logcat还原符号表堆栈日志 - 简书 1、新建空白unity工程,打开PackageManager窗口,菜单栏Window/PackageManager 2、PackageManager中安装Android Logcat日志工具 3、安装AndroidLogcat完成 1.打包 在出包时勾选Create symbols.zip选项,在PlayerSettings面板中,出包选项从

    2024年01月25日
    浏览(33)
  • Android UI 线程更新UI也会崩溃??

    是不是有一丝的郁闷? 没关系,作为拥有多年经验的老鸟,总能立马想到解释的理由: 大家都知道在Activity#onCreate的时候,我们开个线程去执行Text#setText也不会崩溃,原因是ViewRootImpl那时候还没初始化,所以这次没崩溃也是一个原因。 对应源码解释是这样的: public void sho

    2024年03月24日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包