Gibt es einen anderen Grund dafür, dass die Absicht, an onStartCommand(Intent, int, int)
die übergeben wird, NULL ist, außer dass das System den Dienst über ein Flag wie neu startet START_STICKY
?
Wenn der Dienst vom System neu gestartet wird, gibt die Intent.getAction()
Methode manchmal NULL zurück ... manchmal. Absicht ist nicht nur NULLgetAction()
Ich habe auch hier gefragt , aber noch keine Antwort erhalten.
UPDATE : Nachdem er mit Mark Murphy gesprochen hatte, schlug er vor, dass ich START_REDELIVER_INTENT
den onStartCommand()
Rückruf in meinem Dienst zurückgeben sollte, anstatt START_STICKY
dass die gesamte Absicht nach einem Neustart gesendet wird.
Ich habe dies anfangs nicht getan, weil ich befürchtet hatte, dass der Dienst mitten in diesem Vorgang neu gestartet wurde, wenn der Dienst versuchte, etwas zu tun. Wird er erkennen, dass er damit begonnen hat, etwas zu tun? Ich denke, das ist Logik, für die ich verantwortlich sein muss :)
intent
istnull
aufonStartCommand()
, es durch einen anderen Fehler verursacht wird , die in LogCat bevor diese sichtbar ist. Ich weiß nicht warum, aber das habe ich beobachtet und es ist ziemlich leicht, es zu übersehen.NullPointerException
irgendwo in einer der Aktivitäten. Später war es ein anderer Fehler. Aber in beiden Fällen mein Stack - Trace zeigte , dass mein Service - die ausgeführt wurde , während dieser Fehler aufgetreten ist - hatteintent
das warnull
wie in Ihrem Fall. Ich habe ziemlich lange darüber nachgedacht, was los ist, als ich mich entschied, den Stack-Trace nach oben zu scrollen, und es schien, dass ich irgendwo oben meinen wahren Fehler hatte. Nach dem Lösen dieses Problems ist auch der mitnull
intent
verschwunden.Antworten:
Ich bin überrascht, dass es keine Diskussion über die eingehenden Flaggen gibt. Ich werde dies in den Protokollen wie folgt überwachen:
Update: Flags waren 0, daher war dort nichts umsetzbar. Ich habe den Null-Check dort ohne Funktionsverlust belassen.
Edit: Ok, ich habe es ausgerechnet in der Dokumentation von START_STICKY gefunden! "Wenn keine ausstehenden Startbefehle an den Dienst übermittelt werden sollen, wird dieser mit einem Null-Intent-Objekt aufgerufen. Sie müssen daher darauf achten, dies zu überprüfen."
http://developer.android.com/reference/android/app/Service.html
quelle
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. Hat für mich gearbeitet. Aber dann müssen Sie natürlich mit Null Intent korrekt umgehen.But then of course you need to correctly handle null intent
; Was meinst du?! Wie? Vielen Dank.onStartCommand(intent: Intent?, ...)
es funktionieren sollte. Und dann tun Sie es einfach nicht,intent!!
sondern überprüfen Sie korrekt, ob die Absicht null ist.