Cómo ejecutar un bucle infinito en Android sin congelar la interfaz de usuario?
Estoy creando y el programa androide que necesita para mantener continuamente el envío de datos a través del bluetooth ahora uso algo como esto:
for(;;) { //send message }
Aunque esto funciona se congela mi interfaz de usuario y la aplicación ¿cómo puedo implementar el mismo sin congelar mi interfaz de usuario?
Estoy seguro de que la aplicación está enviando los datos a medida que monitoreo los datos.
Ponga su bucle en un AsyncTask
, Service
con hilo separado o simplemente en otro hilo junto a su actividad. Nunca realice trabajos pesados, inserte bucles o bloquee llamadas en su hilo principal (UI).
Debe mover el trabajo en otro subproceso (que no sea el subproceso de interfaz de usuario), para evitar ANR.
new Thread( new Runnable(){ @Override public void run(){ Looper.prepare(); //do work here } }).start();
Lo anterior es un método rápido y sucio, el método preferido en la mayoría de los casos es el uso de AsyncTask
Inicie un IntentService que creará un subproceso de fondo para que ejecute su servicio. Llame a Looper.prepare () como @YellowJK sugiere, pero luego llame a Looper.loop () cuando necesite que su programa espere a que ocurra algo así que el Servicio No es asesinado.
@Override protected void onHandleIntent(Intent arg0) { Looper.prepare(); //Do work here //Once work is done and you are waiting for something such as a Broadcast Receiver or GPS Listenr call Looper.loop() so Service is not killed Looper.loop(); }