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 ... } 

如何使它在正确的背景下运行?

我建议以下面的方式解决它:

首先,像下面这样使用run函数将你的“繁重工作”明确地卸载到后台线程中:

 // explicitly request it to be executed in bg thread suspend private fun getImages(): MutableList<Image> = run(CommonPool) { val uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI ... } 

然后,总是在UI线程中运行触及视图或其他UI对象的协程:

 launch(UI) { val images = getImages(galleryPath) imageListAdapter.setItems(images) }