Ank*_*wal 7 android kotlin android-runonuithread
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")
}
} }
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么runOnUiThread不工作但在该方法之外一切正常.
zsm*_*b13 14
你正在做的是将lambda传递给runOnUiThread函数.它将运行该lambda,并创建一个object继承自的lambda,Runnable然后对其执行任何操作.如果您像这样格式化它可能会看到更好一些(添加一些额外的日志语句和解释):
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")
})
Run Code Online (Sandbox Code Playgroud)
创建object的未分配给变量,从不使用.如果要将Runnable实例传递给runOnUiThread方法,可以通过将其放在runOnUiThread调用的括号中来实现:
runOnUiThread(
object : Runnable {
override fun run() {
Log.i(TAG, "runOnUiThread")
}
}
)
Run Code Online (Sandbox Code Playgroud)
使用runOnUiThread的最简单方法是使用SAM转换将lambda传递给它,并将要直接执行的代码写入其中.
runOnUiThread {
Log.i(TAG, "runOnUiThread")
}
Run Code Online (Sandbox Code Playgroud)
这是涵盖SAM转换的官方文档,恰好Runnable在其示例中使用.
| 归档时间: |
|
| 查看次数: |
13510 次 |
| 最近记录: |