为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

交互式爱情 2022-05-12 16:46:54
我想知道我们如何将消息从一个线程发送到 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 中实现这种线程通信?
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

消息处理与Android密切相关。但您实际上并不想向处理程序发送消息。您实际上只在该线程上运行代码。因此,与其使用您正在做的消息,不如调用post(Runnable):


val uiThreadHandler = Handler(Looper.getMainLooper())


uiThreadHandler.post {

    ...

}

为了进一步抽象这一点,您可以使用带有Android扩展的Kotlin Coroutines:Dispatchers.Main


GlobalScrope.launch(Dispatchers.Main) {

    ...

}

然后,该块将被安排在Android主线程上。如果你没有在块本身中暂停任何东西,这可能是由于你现在没有使用协程,你可能不需要担心取消Job从launch.


查看完整回答
反对 回复 2022-05-12
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

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

        }

    }

}

另请阅读调度程序


查看完整回答
反对 回复 2022-05-12
  • 2 回答
  • 0 关注
  • 247 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号