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) {….}
- Patrón de diseño recomendado para escribir en la base de datos SQLite en Android
- La mejor manera de ejecutar el método asincrónicamente en Android (compacto y correcto)
- Android BLE: onCharacteristicRead () parece estar bloqueado por subprocesos
- Cómo llamar a las actividades de un hilo no actividad?
- PhoneStateListener en el subproceso de fondo
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.
- Obtener No puede crear el controlador dentro de hilo que no ha llamado Looper.prepare () con código que funcionó para Android 4
- Volátil y sinchonizado en AsyncTask
- ¿Es posible que un método de devolución de llamada se llame después de onDestroy?
- ¿Cómo administrar una conexión Bluetooth en Android a través de cambios de configuración?
- Pruebas de unidad de Android con múltiples subprocesos
- ¿Cómo ejecutar una función cada dos segundos en Java en Android?
- ¿Los BroadcastReceivers de Android comenzaron en un nuevo hilo?
- Comercio con método de declaración sincronizado en java?
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.