如何将消息从一个线程发送到 Kotlin 中的 MainThread?

我想知道我们如何将消息从一个线程发送到 kotlin 的主线程。ps:安卓上不行。我不想要任何 android 平台特定的答案。


我已经在 android 平台上尝试过,如下所示


    private val uiThreadHandler = object : Handler(Looper.getMainLooper()) {

        override fun handleMessage(msg: Message) {

            (msg.obj as () -> Unit)()

        }

    }

并将其用作


uiThreadHandler.obtainMessage(0, block).sendToTarget()

我想在普通的 kotlin 上实现这一点。如何在 kotlin 中实现这种线程通信?


交互式爱情
浏览 248回答 2
2回答

哈士奇WWW

消息处理与Android密切相关。但您实际上并不想向处理程序发送消息。您实际上只在该线程上运行代码。因此,与其使用您正在做的消息,不如调用post(Runnable):val uiThreadHandler = Handler(Looper.getMainLooper())uiThreadHandler.post {    ...}为了进一步抽象这一点,您可以使用带有Android扩展的Kotlin Coroutines:Dispatchers.MainGlobalScrope.launch(Dispatchers.Main) {    ...}然后,该块将被安排在Android主线程上。如果你没有在块本身中暂停任何东西,这可能是由于你现在没有使用协程,你可能不需要担心取消Job从launch.

吃鸡游戏

Kotlin 中的简单方法是使用协程和挂起函数class YourClass : CoroutineScope {    // context for main thread    override val coroutineContext: CoroutineContext        get() = Dispatchers.Main + Job()    fun toDoSmth() {        launch {            withContext(Dispatchers.IO) {              // task(1) do smth in another thread            }              // do smth in main thread after task(1) is finished        }    }}另请阅读调度程序
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java