Votre application va planter si vous appelez Context.startForegroundService(...)
puis appelez Context.stopService(...)
avant Service.startForeground(...)
est appelé.
J'ai une nette repro ici ForegroundServiceAPI26
J'ai ouvert un bug sur ce sujet à : Google issue tracker
Plusieurs bugs sur ce ont été ouverts et fermés ne sera pas Corrigé.
Espérons que le mien avec claire étapes de reproduction va faire la coupe.
Les informations fournies par l'équipe de google
Google issue tracker Commentaire 36
Ce n'est pas un cadre de bug; c'est intentionnel. Si l'application démarre une instance de service avec startForegroundService()
, il doit la transition de cette instance de service à l'avant-plan de l'état et de montrer la notification. Si l'instance de service est arrêté avant d' startForeground()
est appelé sur elle, cette promesse est le néant: c'est un bug dans l'application.
Re #31, la publication d'un Service que d'autres applications puissent démarrer directement est fondamentalement dangereux. Vous pouvez atténuer un peu par le traitement de toutes les actions de démarrage de ce service comme nécessitant startForeground()
, bien évidemment, cela peut ne pas être ce que vous aviez à l'esprit.
Google issue tracker Commentaire 56
Il ya un couple de différents scénarios qui conduisent au même résultat ici.
Pure sémantique problème, que c'est tout simplement une erreur à coup quelque chose avec startForegroundService()
mais en négligeant de fait transition à premier plan par startForeground()
, c'est juste que: une question sémantique. Qui est considéré comme une application bug, intentionnellement. L'arrêt du service avant de faire la transition vers le premier plan est une application d'erreur. C'est là le fond de l'OP, et c'est pourquoi cette question a été marquée "fonctionne comme prévu."
Cependant, il y a aussi des questions sur les fausses détection de ce problème. Qui est considérée comme un véritable problème, si elle était suivie séparément à partir de ce bug tracker question. Nous ne sommes pas sourds à la plainte.