Tag: 协同程序

Kotlin协程CalledFromWrongThreadException

我正在尝试使用Kotlin协同程序在后台执行一些繁重的工作。 但是我得到了这个错误信息, 'android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触及其视图。 fun setList() { media_image_list.adapter = imageListAdapter … launch { val images = getImages(galleryPath) imageListAdapter.setItems(images) } } suspend private fun getImages(): MutableList<Image> { val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI … } 如何使它在正确的背景下运行?

Kotlin:跳过协程

我在演示Android应用程序中玩Kotlin和Coroutines。 这是我有: fun testCoroutine3() = runBlocking { var num = 0 val jobs = List(10_000) { // create a lot of coroutines and list their jobs. launch(CommonPool) { delay(1000L) println(num++) } } for(job in jobs) { job.join() //wait for all jobs to finish } println("FINAL RESULT $num") } 基本上,我创建了1万个等待1秒的协程的列表,然后打印一个数字然后递增。 然后,当所有的工作完成后,我打印最终的结果。 (这个演示取自GitHub文档 ) 现在我的大部分测试运行良好,所有的协程几乎同时运行,最终结果是10000 但在一些罕见的情况下,我得到的最终结果是9,999 例如,当我把这个数字增加到5万时,这变得更加明显: […]

kotlin coroutine val vs乐趣

我是协程和Kotlin的新学习者。 为什么我会得到不同的结果,下面的情况1和2? fun main(args: Array<String>) = runBlocking { fun a() = async(CommonPool) { println("start A") delay(1000) println("finish A") } fun b() = async(CommonPool) { println("start B") delay(1000) println("finish B") } //case 1 a().await() b().await() //case 2 val A = a() val B = b() A.await() B.await() } 这种val风格的编码基本?