在KotlinAndroid中,runOnUiThread和CoroutineScope(Dispatchers.Main)之间有什么区别吗

lsmd5eda  于 2022-11-16  发布在  Kotlin
关注(0)|答案(2)|浏览(242)

我不知道CoroutineScope(Dispatchers.Main).launchrunOnUiThread之间有什么区别,我认为两者都将在主线程上运行。
但是混淆还是有区别的。

  • 谢谢-谢谢
wfsdck30

wfsdck301#

首先,只能在Activity的上下文中调用runOnUiThread
其次,您不能从runOnUiThread调用suspend函数,而可以在CoroutineScope(Dispatchers.Main).launch块中调用。
第三,runOnUiThread检查当前ui线程是否忙碌其他操作,如果是,则将任务发布到活动处理程序,并在轮到它时执行。

rqdpfwrv

rqdpfwrv2#

使用不同的技术,它们是不同的东西,实际上,这归结为你是否已经使用了协程。如果是这样,当你的代码需要在主线程上时,切换到 Main 调度程序。如果你没有使用协程,而你显式地使用了另一个线程,那么您可以使用runOnUiThread在主线程上运行一些代码。如果您没有使用协程 * 或 * 线程,那么您根本不需要调用runOnUiThread
没有什么可以阻止你在协程中使用runOnUiThread--但是它并不是真正适合这项工作的工具,你不必要地超出了协程处理。另外,就像 Steyrix 所说的,你需要访问类似Activity的东西才能做到这一点,这可能意味着在一个长时间运行的协程中持有一个对它的引用,而它应该被垃圾收集。
还有很多其他方法可以回到主线程上,例如postRunnable转换到Handler(或者通过View),或者LiveData上的postValue方法。如果有更简洁和方便的方法可用,你不必切换调度程序,这完全取决于具体情况

相关问题