Mensajería al hilo de la interfaz de usuario

Estoy desarrollando una aplicación serialport para módulos knx en android. Puedo enviar y recibir elogios a knx modulde. Quiero cambiar ui (por ejemplo las propiedades del botón) cuando reciba un mensaje de serialport. Lo intenté con los manejadores, pero no puedo cambiar ui. ayúdame plss

@Override public void OnSerialsData (buffer final del byte [], tamaño int final) {….}

es mi función del oyente del serialport que llama insine ReadThread. Este hilo está empezando en el paquete differend de mi actividad. Quiero enviar un mensaje en este método a la actividad principal.

Puede utilizar Activity.runOnUiThread () para comunicarse con el subproceso de la interfaz de usuario. Obtenga más información sobre los procesos y los subprocesos , especialmente sobre los subprocesos de trabajo .

Por ejemplo, dentro de su OnSerialsData , puede llamar al

 mActivity.runOnUiThread(new Runnable() { public void run() { mActivity.mButton.setText("message arrived!"); } } 

primero tienes que crear un controlador estático dentro de tu actividad principal:

 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } public static Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); Log.e("Test", msg.getData().getCharSequence("MAINLIST").toString()); } }; } 

entonces en su clase socket:

 public void OnSerialsData(final byte[] buffer, final int size) { Message msg = MainActivity.myHandler.obtainMessage(); Bundle bundle = new Bundle(); bundle.putCharSequence("MAINLIST", "IS_OK"); msg.setData(bundle); MainActivity.myHandler.sendMessage(msg); } 

pero debe asegurarse de que su controlador debe crearse antes de llamar al método OnSerialsData.

Espero que esta ayuda.

sólo extendiendo @auselen respuesta.

Crea en tu actividad lo siguiente:

 public void messageReceived(final String msg){ runOnUiThread(new Runnable() { @Override public void run() { // Put here your code to update the UI } }); } 

y luego puede llamar a esto desde cualquier clase que tenga una referencia a su actividad. Si la clase no tiene una referencia a la actividad, entonces debe pasar la referencia a ella.

  • Android: mensajes de Handler retrasados ​​al final del hilo de trabajo
  • Handler.post (runnable) no ejecuta siempre el método run en android
  • Cómo pasar el parámetro de tipo byte a la función AsyncTask?
  • ¿Cuál es el propósito de sSyncAdapterLock en la muestra SyncService?
  • Android 4.0 asynctask al mismo tiempo no es posible
  • Cómo utilizar Runnable.wait () en AsyncTask? ¿Por qué el AsyncTask NO espera ...?
  • Android: CursorLoader, LoaderManager, SQLite
  • Pasar variables entre el renderizador y otra clase con queueEvent ()
  • Excepción de interrupción de subproceso en modo Multi-ventana
  • AIDL vs Messenger
  • Segunda AsyncTask no se ejecuta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.