tutorial start sendbroadcast registerreceiver oreo example connectivity_change android broadcastreceiver

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); }