108 votes

Raisons pour lesquelles l'intention transmise serait NULL dans onStartCommand

Est-il tout autre motif que l'Intention qui est passé de onStartCommand(Intent, int, int) serait NULLE par ailleurs le système de redémarrer le service par l'intermédiaire d'un drapeau comme START_STICKY?

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

J'ai demandé ici aussi, mais n'ai pas reçu de réponse pour l'instant.

Mise à JOUR: Après avoir discuté avec Mark Murphy, il a suggéré que je reviens START_REDELIVER_INTENT dans la onStartCommand() rappel dans mon service au lieu de START_STICKY , de sorte que l'ensemble de l'intention est envoyé à la suite d'un redémarrage.

Je n'ai pas ce faire d'abord parce que j'étais inquiet que si le service a été de tenter de faire quelque chose, puis dans le milieu de quelque chose que le service a été redémarré... qu'il reconnaisse qu'il a commencé à faire quelque chose? Je suppose que c'est logique, j'ai besoin d'être responsable :)

54voto

Eric Woodruff Points 1886

Je suis surpris, il n'y a pas de discussion de l'entrée de drapeaux. Je vais surveiller cela dans les journaux avec les éléments suivants:

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: Drapeaux étaient de 0, donc il n'y a rien d'exploitable. J'ai quitté le null de vérifier avec aucune perte de fonction.

Edit: Ok, je l'ai trouvé dans la documentation de START_STICKY de tous les lieux! "si il n'y a pas tout dans l'attente de commencer à commandes pour être remis au service, il sera appelée avec une valeur null à l'intention de l'objet, alors vous devez prendre soin de le vérifier."

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

0voto

Peter Fortuin Points 1381

Je ne pense pas que l'intention puisse être nulle (à côté lorsqu'un service est redémarré par le système d'exploitation Android). Lorsque votre application ou une autre application démarre votre service, une intention est toujours requise. Par conséquent, appeler sur la commande onStart sans intention ne peut provenir que d’Android.

Démarrer un service (à partir d'une application) est impossible sans intention.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X