thread termine tareas subprocesos studio segundo que procesos plano new mantener hilos gestion esperar asincronos asincronas app android multithreading

termine - procesos y subprocesos android



¿Ejecutar código en el hilo principal en Android sin acceso a una actividad? (4)

Necesita devoluciones de llamada en el hilo principal para poder actualizar los elementos de la interfaz de usuario.

Use LocalBroadcastManager y LocalBroadcastManager que el servicio envíe una transmisión, para que la actividad lo LocalBroadcastManager , lo que lo incluirá en el hilo principal de la aplicación. Aquí hay una aplicación de ejemplo que demuestra esto .

O, use una transmisión "real" con sendBroadcast() .

O use un Messenger , como mencionó, vinculado a un Handler , como mencionó Guillermo, aunque no necesariamente tiene que usar el enlace para hacerlo.

Tengo un servicio de Android que inicia y mantiene un hilo de fondo.

De vez en cuando, el hilo de fondo debe hacer una devolución de llamada en el hilo principal. Estoy perplejo en cuanto a cómo hacer esto.

No puedo llamar a this.runOnUiThread porque "this" es una instancia de Servicio, no de Actividad, y un Servicio no tiene el método runOnUiThread.

Tampoco puedo crear o ejecutar una AsyncTask, porque la documentación de AsyncTask dice que tanto el constructor como el método de ejecución deben invocarse desde el subproceso de la interfaz de usuario.

¿Debo mantener una referencia a la actividad que usa el servicio y llamar a su método runOnUiThread, o hay otra forma de ejecutar algo en el subproceso de la interfaz de usuario?

Gracias.


Estoy usando el siguiente código de vez en cuando si no tengo acceso directo a la Actividad (por una razón u otra);

new Handler(Looper.getMainLooper()).post(mYourUiThreadRunnable);


Por supuesto. Ver el Handler . Puede darle a su servicio un objeto de controlador y cuando el servicio necesite ejecutar alguna tarea ejecutable en el subproceso de la interfaz de usuario solo debe llamar a handler.post (some_runnable_task). Esta llamada. Puedes encontrar un ejemplo en este link 4.Tutorial: Handler.


Tu actividad tiene que poder vincularse al servicio.

http://developer.android.com/guide/components/bound-services.html

Específicamente, eche un vistazo a la creación de un Messenger en esa página. La actividad del cliente puede proporcionar un objeto de mensajería que responde a los mensajes del servicio y, una vez recibidos, ejecute el código de UI necesario en el subproceso de la interfaz de usuario utilizando un controlador.

NO mantenga la referencia de la actividad en el servicio. Esto puede llevar a todo tipo de problemas de memoria.