NOTA: Esta respuesta ha g A pesar de tanta atención, necesito actualizarla. Desde que se publicó la respuesta original, el comentario de @dzeikei recibió casi tanta atención como la respuesta original. Así que aquí están 2 soluciones posibles:
1. Si el subproceso de fondo tiene una referencia a un objeto Context
:
asegurarse de que sus subprocesos de trabajo de fondo tienen acceso a un objeto de contexto (puede ser el contexto de aplicaciones o el contexto del Servicio). A continuación, sólo hacer esto en el subproceso de trabajo de fondo:
// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {....} // This is your code
};
mainHandler.post(myRunnable);
2. Si el subproceso de fondo no tiene (o necesidad) de un objeto Context
(sugerida por @dzeikei):
// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = new Runnable() {
@Override
public void run() {....} // This is your code
};
mainHandler.post(myRunnable);
También puede utilizar el receptor de difusión personalizada .... intentar mi respuesta aquí, [Receptor Broadcast Interior] [1] [1]: http://stackoverflow.com/a/22541324/1881527 –
Hay muchas maneras. Además de la respuesta de David y el comentario de dzeikei en su respuesta, (3) puede usar un Receptor de radiodifusión, o (4) pasar el controlador en extras de Intención utilizada para iniciar el servicio y luego recuperar el manejador del subproceso principal dentro del servicio utilizando getIntent () .getExtras(). –