web-dev-qa-db-fra.com

Raisons pour lesquelles l'intention transmise serait NULL dans onStartCommand

Y a-t-il une autre raison pour laquelle l'intention transmise à onStartCommand(Intent, int, int) serait NULL en plus du redémarrage du service via un indicateur tel que START_STICKY?

En outre, lorsque le service est redémarré par le système, la méthode Intent.getAction() renvoie parfois NULL ... L'intention n'est pas NULL juste getAction()

J'ai aussi demandé ici 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 retourner START_REDELIVER_INTENT dans le onStartCommand() rappel dans mon service au lieu de START_STICKY afin que l'intégralité de l'intention soit envoyée après un redémarrage.

Je ne l'ai pas fait initialement parce que je craignais que si le service tentait de faire quelque chose, au milieu de quelque chose, le service a été redémarré ... reconnaîtra-t-il qu'il a commencé à faire quelque chose? Je suppose que c'est la logique dont je devrai être responsable :)

92
rf43

Je suis surpris qu'il n'y ait aucune discussion sur les drapeaux entrants. Je vais surveiller cela dans les journaux avec ce qui suit:

if (null == intent || null == intent.getAction ()) {
        String source = null == intent ? "intent" : "action";
        Log.e (TAG, source + " was null, flags=" + flags + " bits=" + Integer.toBinaryString (flags));
        return START_STICKY;
}

Mise à jour: les drapeaux étaient à 0, il n'y avait donc rien à faire. J'ai laissé le contrôle nul là-dedans sans perte de fonction.

Edit: Ok, je l'ai trouvé dans la documentation de START_STICKY de tous les endroits! "S'il n'y a aucune commande de démarrage en attente à livrer au service, elle sera appelée avec un objet d'intention nulle, vous devez donc prendre soin de vérifier cela."

http://developer.Android.com/reference/Android/app/Service.html

46
Eric Woodruff