gpt4 book ai didi

android - runOnUiThread 没有调用

转载 作者:IT老高 更新时间:2023-10-28 13:41:30 24 4
gpt4 key购买 nike

localChatManager.addIncomingListener { from, message, chat ->

Log.v(TAG,"listener")


//You can't modify views from non-UI thread.
this@chatActivity.runOnUiThread { object :Runnable{
override fun run() {
Log.i(TAG,"runOnUiThread")
}
} }
}

我无法弄清楚为什么 runOnUiThread 不工作,但在该方法之外,一切都照常工作。

最佳答案

您正在做的是将 lambda 传递给 runOnUiThread 函数。它将运行那个 lambda,并创建一个继承自 Runnableobject,然后什么也不做。如果像这样格式化(添加一些额外的日志语句和解释),也许你会看到更好一点:

runOnUiThread({
Log.i(TAG, "This is run")
object : Runnable { // This whole expression
override fun run() { // returns an object which
Log.i(TAG, "runOnUiThread") // is a Runnable, but does
} // not at any point invoke
} // its "run" method
Log.i(TAG, "And so is this")
})

创建的 object 没有分配给变量,并且从不使用。如果您想将 Runnable 实例传递给 runOnUiThread 方法,只需将其放在 runOnUiThread 调用的括号内即可:

runOnUiThread(
object : Runnable {
override fun run() {
Log.i(TAG, "runOnUiThread")
}
}
)

不过,使用 runOnUiThread 的最简单方法是使用 SAM 转换将 lambda 传递给它,然后在其中直接编写要执行的代码。

runOnUiThread { 
Log.i(TAG, "runOnUiThread")
}

这里是 official documentation covering SAM conversions ,在其示例中恰好使用了 Runnable

关于android - runOnUiThread 没有调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43617361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com