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 AsyncTask onPostExecute fuera del hilo principal de ui
  • Enfoque correcto de Android: ¿dónde se debe analizar la respuesta de JSON - en el subproceso de interfaz de usuario, o en otro?
  • ¿Qué es más eficiente Broadcast Receiver o Handler?
  • Mostrar identificación de hilo de Android en LogCat
  • Realm.io y consultas asincrónicas
  • Proveedores de contenido multiproceso sincronizados a uno predeterminado
  • ¿Es el hilo de ArrayAdapter seguro en android? Si no, ¿qué puedo hacer para que sea seguro?
  • IntentService y Threadpool
  • IllegalArgumentException en StatFs en WebViewCore thread interno
  • Android de larga duración 'servicio'
  • Creación de vistas dentro de un hilo de trabajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.