sendbroadcast - start broadcast receiver android
Iniciando el servicio desde BroadcastReceiver (5)
Tengo un Service
y BroadcastReceiver
en mi aplicación, pero ¿cómo inicio el servicio directamente desde BroadcastReceiver
? Utilizando
startService(new Intent(this, MyService.class));
no funciona en un BroadcastReceiver
, alguna idea?
EDITAR:
context.startService (..);
funciona, olvidé la parte del contexto
Como el método de recepción de un receptor (Contexto, Intención) se ejecuta en el hilo principal, debe ejecutarse y regresar rápidamente. Si necesita realizar un trabajo prolongado, tenga cuidado con los hilos de generación o el inicio de servicios en segundo plano porque el sistema puede matar a todo el proceso después de que regrese onReceive (). Para obtener más información, consulte Efecto sobre el estado del proceso Para realizar trabajos de larga ejecución, recomendamos:
Llamar a goAsync () en el método onReceive () de su receptor y pasar el BroadcastReceiver.PendingResult a una cadena de fondo. Esto mantiene la transmisión activa después de regresar de onReceive (). Sin embargo, incluso con este enfoque, el sistema espera que termine con la transmisión muy rápidamente (menos de 10 segundos). Le permite mover el trabajo a otro hilo para evitar fallas en el hilo principal. Programar un trabajo con JobScheduler developer.android.com
Mejores prácticas :
Al crear un intento, especialmente cuando se inicia desde BroadcastReceiver
, no tome esto como contexto. Tome context.getApplicationContext()
como abajo
Intent intent = new Intent(context.getApplicationContext(), classNAME);
context.getApplicationContext().startService(intent);
No lo olvides
context.startService(..);
debería ser así:
Intent i = new Intent(context, YourServiceName.class);
context.startService(i);
asegúrese de agregar el servicio a manifest.xml
utilice el context
del método onReceive
de su BroadcastReceiver para iniciar su componente de servicio.
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context, YourService.class);
context.startService(serviceIntent);
}