runOnUiThread no está llamando

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") } } } } 

No puedo descifrar por qué runOnUiThread no funciona, pero fuera de ese método todo funciona como siempre.

Solutions Collecting From Web of "runOnUiThread no está llamando"

Lo que estás haciendo es pasar una lambda a la function runOnUiThread . Ejecutará ese lambda y creará un object que henetworkinga de Runnable y luego no hará nada con él. Tal vez pueda ver eso un poco mejor si lo formatea así (se agregaron algunas explicaciones y resúmenes adicionales):

 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") }) 

El object creado no está asignado a una variable y nunca se usa. Si desea pasar una instancia de runOnUiThread método runOnUiThread , puede hacerlo simplemente poniéndolo entre paréntesis de la llamada runOnUiThread :

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

La forma más simple de usar runOnUiThread es pasarle una lambda usando conversión SAM, y escribir el código que desea ejecutar directamente dentro de eso.

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

Aquí está la documentation oficial que cubre las conversiones de SAM , que usa Runnable en sus ejemplos.

La respuesta anterior es correcta y debe ser aceptada.
En caso de que provenga de Java, aquí hay un ejemplo de Java equivalente a su código:

  runOnUiThread(new Runnable() { // This runnable is created @Override // from lambda by SAM convention public void run() { new Runnable() { // This Runnable is instantiated @Override // inside the lambda but never runs. public void run() { Log.i(TAG, "runOnUiThread"); } }; } }); 

Espero que puedas ver cómo el código interno no se ejecuta.