Y a-t-il une autre raison pour laquelle l'intention qui est passée onStartCommand(Intent, int, int)
serait NULL en plus du redémarrage du service par le système via un indicateur tel que START_STICKY
?
De plus, lorsque le service est redémarré par le système, la Intent.getAction()
méthode renvoie NULL ... parfois. L'intention n'est pas NULL justegetAction()
J'ai demandé ici aussi mais je n'ai pas encore reçu de réponse.
MISE À JOUR : Après avoir discuté avec Mark Murphy, il m'a suggéré de revenir START_REDELIVER_INTENT
dans le onStartCommand()
rappel dans mon service au lieu de START_STICKY
pour que l'intégralité de l'intention soit envoyée après un redémarrage.
Je n'ai pas fait cela au départ parce que je craignais que si le service essayait de faire quelque chose, alors au milieu de ce quelque chose, le service a été redémarré ... reconnaîtra-t-il qu'il a commencé à faire quelque chose? Je suppose que c'est logique dont je devrai être responsable :)
intent
estnull
suronStartCommand()
, elle est causée par une autre erreur qui est visible dans LogCat avant cela. Je ne sais pas pourquoi, mais c'est ce que j'ai observé et il est assez facile de l'ignorer.NullPointerException
quelque part dans l'une des activités. Plus tard, ce fut une autre erreur. Mais dans les deux cas, ma trace de pile a montré que mon service - qui fonctionnait pendant que cette erreur se produisait -intent
étaitnull
comme dans votre cas. J'ai longtemps réfléchi à ce qui n'allait pas, quand j'ai décidé de faire défiler la trace de la pile et il est apparu que quelque part en haut j'avais ma vraie erreur. Après avoir résolu celui-ci, celui avec a égalementnull
intent
disparu.Réponses:
Je suis surpris qu'il n'y ait pas de discussion sur les drapeaux entrants. Je vais surveiller cela dans les journaux avec ce qui suit:
Mise à jour: les indicateurs étaient 0, il n'y avait donc rien de concret. J'ai laissé l'enregistrement nul là-dedans sans perte de fonction.
Edit: Ok, je l'ai trouvé dans la documentation de START_STICKY de tous les lieux! "s'il n'y a pas de commandes de démarrage en attente à livrer au service, il sera appelé avec un objet d'intention nul, vous devez donc prendre soin de vérifier cela."
http://developer.android.com/reference/android/app/Service.html
la source
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. A travaillé pour moi. Mais alors, bien sûr, vous devez gérer correctement l'intention nulle.But then of course you need to correctly handle null intent
; Que voulez-vous dire?! Comment? Merci.onStartCommand(intent: Intent?, ...)
cela devrait fonctionner. Et puis ne faites pasintent!!
mais vérifiez correctement si l'intention est nulle.