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