Cómo setText de un hilo independiente en Android

Quiero setText de dentro de un hilo.

Este es mi código del hilo:

private class GenerateThread implements Runnable { public void run(){ // generate the first music music = generate(prevmusic, prevmusic.length); prevmusic = music; // write the midi writeMidi(music, song); textOut.setText("Initialising..."); }); } } 

En mi código principal, yo uso

 Thread t = new Thread(new GenerateThread()); t.start(); 

No me permite establecer el texto desde dentro del hilo. Después de algunos posts en internet, he intentado usar un manejador, pero eso me dio errores, creo que soy doble definiendo Runnable de esta manera.

Manipulador (antes del principal)

 private class GenerateThread implements Runnable { public void run(){ handler.post(new Runnable() { // generate the first music music = generate(prevmusic, prevmusic.length); prevmusic = music; // write the midi writeMidi(music, song); textOut.setText("Initialising..."); }); } } 

¿Cómo puedo setText desde dentro del hilo? ¡Gracias!

Además de runOnUiThread también hay View#post(Runnable) que preferiría aquí porque no necesita referencias de aspecto feo a la actividad externa ( MyActivity.this.runOnUiThread() ).

 private class GenerateRunnable implements Runnable { public void run() { // this code is executed in a background thread. // generate the first music music = generate(prevmusic, prevmusic.length); prevmusic = music; // write the midi writeMidi(music, song); textOut.post(new Runnable() { public void run() { // this code is executed on the UI thread. textOut.setText("Initialising..."); } }); } } @Override protected void onResume() { super.onResume(); new Thread(new GenerateRunnable()).start(); } 

También no confunda Runnable y Thread . Un Runnable es sólo una clase ordinaria con un método run() . Puede ser ya menudo se ejecuta en un nuevo Thread . Si lo desea, también puede hacer que GenerateThread un Thread real así:

 private class GenerateThread extends Thread { @Override public void run() { // code here. } } // start somewhere new GenerateThread().start(); 

Y además de usar Thread clásico también podría pensar en usar AsyncTask ya que se hace exactamente para las tareas que hacen algo de larga ejecución y la necesidad de actualizar la interfaz de usuario después o cuando hay progreso.

Uno sólo puede actualizar la interfaz de usuario desde el subproceso de interfaz de usuario. RunOnUiThread le permitirá ejecutar una acción en el subproceso de la interfaz de usuario la próxima vez que se ejecute. Usted puede hacer algo como:

 runOnUiThread(new Runnable() { public void run() { textOut.setText("Initialising..."); } }); 

EDITAR:

 private class GenerateThread implements Runnable { public void run(){ // generate the first music music = generate(prevmusic, prevmusic.length); prevmusic = music; // write the midi writeMidi(music, song); // Update the UI MyActivity.this.runOnUiThread(new Runnable() { public void run() { textOut.setText("Initialising..."); } }); } } 
  • OnSaveInstanceState / onPause - espera hasta que el estado se salve por completo antes de permitir que se procese el proceso
  • Android kill thread específico en evento barra de acción
  • Pantalla secundaria de Android: persistencia a través de la invocación de actividad
  • Objeto no bloqueado por subproceso antes de notificar () en onPostExecute
  • Sincronizar el acceso a HashMap desde dos subprocesos en java
  • Cómo crear un hilo en Android NDK?
  • Android BluetoothSocket - Tiempo de espera
  • Android, cuando debo usar syncronized en un hilo
  • android-Cómo ejecutar el servicio en diferentes hilos de rosca principal?
  • Java - Android: Hilo que se llama (ejecutar) dos veces
  • Cuando está fuera del hilo principal, ¿cómo puedo obtener algún código para ejecutarse en el hilo principal lo más rápido posible?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.