Cómo setText de un hilo independiente en Android
Quiero setText de dentro de un hilo.
Este es mi código del hilo:
- ¿Es legal llamar al método de inicio dos veces en el mismo hilo?
- Cómo pausar / dormir hilo o proceso en Android?
- CancelaciónExcepción al utilizar ExecutorService
- Puedo matar o terminar () una actividad en un hilo que no sea el hilo de la interfaz de usuario ...?
- Cómo tener múltiples conexiones a un solo dispositivo bluetooth Obd2 conectado al coche
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!
- ¿Cómo evitar la espera en el hilo principal cuando se añaden los encabezados a las solicitudes de retrofit?
- Android wait asynctask para terminar
- ¿Se asignan automáticamente nuevos subprocesos a un núcleo de CPU diferente en Java?
- Cómo matar un hilo en Android?
- Manejadores, MessageQueue, Looper, ¿todos ellos se ejecutan en el hilo de interfaz de usuario?
- Número máximo de hilos Android
- ¿Un Runnable puede devolver un valor?
- ¿Algún consejo sobre cómo acelerar esto en Android?
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..."); } }); } }
- Cómo dibujar una flecha utilizando la clase de gráficos de Android?
- Problema en la adición de elementos comunes de arraylist en el arraylist tercero que utiliza para el lazo