Dans ma demande, j'ai un service de premier plan en cours d'exécution. Je suis capable d'arrêter le service de premier plan sans problèmes lorsque l'utilisateur se déconnecte. Toutefois, si l'utilisateur utilise la fermeture de l'application ou de l'application se bloque, je ne peux pas gérer l'arrêt du premier plan. P>
Onsleep () est appelé lorsque l'application se ferme / se bloque, mais elle est également appelée lorsque l'application est fondée. Le service d'initiation que j'utilise doit continuer à courir si l'application a été fondée, mais j'ai besoin d'arrêter le service de premier plan lorsqu'il est fermé par opposition à la base, pour cette raison, je ne peux pas arrêter le service de premier plan de la méthode ONSLEEP (). p>
Y a-t-il une façon de savoir quand l'application se ferme (non d'information) afin que je puisse gérer l'arrêt du service de premier plan? P>
3 Réponses :
J'ai rencontré le même problème et celui de la mise en œuvre consistait à ajouter une sorte de "bouton" (action) à la notification du service de premier plan à l'aide de BroadCastreCeiver . Ainsi, après la fermeture de l'utilisateur de l'application, vous pourrez fermer le service de premier plan simplement en appuyant sur le bouton inclus dans la notification de premier plan. De mon prospectif, vous devriez également remplacer la méthode OnDestroy () pour faire des trucs là-bas et appeler Stopforeground (un exemple). Parce qu'il peut y avoir des cas lorsque le système décide de détruire le service par lui-même (un exemple, le service n'est plus utilisé et est enlevé.). P>
J'ai compris une solution. S'il vous plaît voir ma réponse, cela peut être utile pour vous.
Oui, vous avez raison, c'est logique de remplacer également cette méthode
Pour arrêter le service de premier plan, vous pouvez le faire:
StopSelf();
Je ne demande pas comment arrêter un service de premier plan. Je demande comment je peux savoir quand ma demande se ferme afin que je puisse empêcher le service de premier plan en cours d'exécution après la fermeture de la demande. Je pense que vous avez mal compris ma question.
Belle réponse Cherry, je me demande simplement où (quelle classe / partie de mon application) je peux remplacer OnDestroy pour appeler stopservice () de?
J'ai trouvé une solution, qui semble au moins fonctionner pour ma situation. C'est aussi une solution simple. Dans la même classe que je remplace Onstarcommand, j'ai également fait une substitution d'OntoStaskremoved qui est tirée lorsqu'une tâche du service a été supprimée par l'utilisateur. Ainsi, lorsqu'un utilisateur passe à fermer l'application, OntoStaskremoved sera appelé, où vous pouvez gérer la fermeture du service.
public override void OnTaskRemoved(Intent rootIntent) { if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { StopForeground(StopForegroundFlags.Remove); } else { StopForeground(true); } StopSelf(); base.OnDestroy(); System.Diagnostics.Process.GetCurrentProcess().Kill(); }
Heureux d'entendre que vous avez résolu votre problème par vous-même, n'oubliez pas de marquer votre réponse comme réponse, il est bénéfique pour les autres de trouver cette réponse, merci.