J’ai un Service
et BroadcastReceiver
dans mon application, mais comment puis-je lancer le service directement à partir de BroadcastReceiver
? En utilisant
startService(new Intent(this, MyService.class));
ne fonctionne pas dans un BroadcastReceiver
, des idées?
MODIFIER:
context.startService (..);
fonctionne, j’ai oublié la partie contextuelle
N’oublie pas
context.startService(..);
devrait être comme ça:
Intent i = new Intent(context, YourServiceName.class); context.startService(i);
assurez-vous d’append le service à manifest.xml
Utilisez le context
de la méthode onReceive
de votre BroadcastReceiver pour démarrer votre composant de service.
@Override public void onReceive(Context context, Intent intent) { Intent serviceIntent = new Intent(context, YourService.class); context.startService(serviceIntent); }
Meilleur entrainement :
Lors de la création d’une intention, en particulier à partir de BroadcastReceiver
, ne prenez pas cela comme contexte. Prenez context.getApplicationContext()
comme ci-dessous
Intent intent = new Intent(context.getApplicationContext(), classNAME); context.getApplicationContext().startService(intent);
Comme la méthode onReceive (Context, Intent) d’un récepteur s’exécute sur le thread principal, elle doit s’exécuter et retourner rapidement. Si vous devez effectuer un long travail, soyez prudent lorsque vous lancez des threads ou démarrez des services d’arrière-plan, car le système peut tuer tout le processus après le retour d’onReceive (). Pour plus d’informations, voir Effet sur l’état du processus Pour effectuer un travail de longue durée, nous vous recommandons:
Appeler goAsync () dans la méthode onReceive () de votre récepteur et passer le BroadcastReceiver.PendingResult à un thread d’arrière-plan. Cela maintient la diffusion active après le retour de onReceive (). Cependant, même avec cette approche, le système s’attend à ce que vous terminiez l’émission très rapidement (moins de 10 secondes). Cela vous permet de déplacer le travail vers un autre thread pour éviter de surcharger le thread principal. Planification d’un travail avec JobScheduler developer.android.com