2011-03-23 10 views
9

En mi método OnCreate, he creado un hilo que escucha el mensaje entrante.Actualizar textoVer del hilo

In OnCreate() { 

//Some code 

myThread = new Thread() { 

      @Override 

      public void run() { 

       receiveMyMessages(); 

      } 
     }; 
myThread.start(); 

// Some code related to sending out by pressing button etc. 

} 

Then, receiveMyMessage() functions… 

Public void receiveMyMessage() 
{ 

//Receive the message and put it in String str; 

str = receivedAllTheMessage(); 

// << here I want to be able to update this str to a textView. But, How? 
} 

yo nos registramos this article pero no funcionó para mí, no hay suerte!

Respuesta

19

Cualquier actualización de la interfaz de usuario en una aplicación de Android debe ocurrir en el hilo de la interfaz de usuario. Si genera un hilo para hacer el trabajo en segundo plano, debe ordenar los resultados al hilo de la interfaz de usuario antes de tocar una vista. Puede utilizar la clase Handler para realizar el cálculo de referencias:

public class TestActivity extends Activity { 
    // Handler gets created on the UI-thread 
    private Handler mHandler = new Handler(); 

    // This gets executed in a non-UI thread: 
    public void receiveMyMessage() { 
     final String str = receivedAllTheMessage(); 
     mHandler.post(new Runnable() { 
      @Override 
      public void run() { 
       // This gets executed on the UI thread so it can safely modify Views 
       mTextView.setText(str); 
      } 
     }); 
} 

La clase AsyncTask simplifica muchos de los detalles para usted y también es algo que usted podría considerar. Por ejemplo, creo que le proporciona un grupo de subprocesos para ayudar a mitigar parte del costo asociado con el engendramiento de un nuevo hilo cada vez que desea hacer un trabajo en segundo plano.

+0

Hola a todos, gracias, muchas gracias por su tiempo. Sin embargo, ¡no hay suerte! Estoy tratando de reformular mi pregunta: - (junto con la pregunta original) En el OnCreate llamado receiveMyMessage() en un hilo! Eso significa que receiveMyMessage está en un hilo separado. En este hilo, tengo un ciclo while, ¡que está leyendo si hay algún mensaje! receiveMessages public void() { bucle while (condiciones) { str = receivedAllTheMessage(); // Ahora, aquí Quiero actualizar elementos de la GUI tv.settext ... etc .. }} –

+1

** punta adicional sobre esta respuesta: ** Se puede omitir la creación del manejador separada mediante el uso de la actividad de objeto controlador 'handler = getWindow(). getDecorView(). getHandler();' – Kent

+0

@Kent Ese consejo puede funcionar o no, dependiendo de dónde lo use. Encontré ese consejo en otra parte de Internet, y lo utilicé, y luego, cuando cambié algunas cosas en mi programa, de repente ya no funcionó. Consulte aquí para obtener más información: http://codereview.stackexchange.com/a/114723/92925 – RenniePet

0

Android es compatible con la simultaneidad de paso de mensajes mediante manipuladores y sendMessage (msg). (También es posible usar manejadores para concurrencia de memoria compartida). Un consejo es llamar a thread.setDaemon (true) si desea que el hilo muera cuando la aplicación muera. El otro consejo es tener solo un controlador y usar message.what y una instrucción switch en el controlador de mensajes para enrutar mensajes.

Code y Code

Cuestiones relacionadas