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不工作,但在该方法之外,一切都照常工作。
5条答案
按热度按时间ngynwnxp1#
你正在做的是将lambda传递给
runOnUiThread
函数。它将运行该lambda,并创建一个从Runnable
继承的object
,然后不做任何事情。如果你像这样格式化它(添加一些额外的日志语句和解释),也许你可以看到更好的一点:创建的
object
不会被赋值给变量,也不会被使用。如果你想把一个Runnable
示例传递给runOnUiThread
方法,你可以把它放在runOnUiThread
调用的括号里:使用runOnUiThread最简单的方法是使用SAM转换将lambda传递给它,并在其中直接编写要执行的代码。
下面是涵盖SAM转换的官方文档,它在示例中碰巧使用了
Runnable
。mxg2im7a2#
以上答案正确,应该接受。
如果你来自Java,这里有一个你代码的等价Java的例子:
我希望你能看到内部代码是如何不被执行的。
68bkxrlz3#
基于Rx的答案:
jgovgodb4#
最好使用协程
尝试使用
syqv5f0l5#