Czy jest jakiś inny powód, dla którego przekazywana intencja onStartCommand(Intent, int, int)
miałaby wartość NULL, poza ponownym uruchomieniem usługi przez system za pomocą flagi takiej jak START_STICKY
?
Ponadto, gdy usługa jest ponownie uruchamiana przez system, Intent.getAction()
metoda czasami zwraca NULL ... Intencja nie jest tylko NULLgetAction()
Tutaj też pytałem , ale nie otrzymałem jeszcze odpowiedzi.
AKTUALIZACJA : Po rozmowie z Markiem Murphym zasugerował, abym powrócił START_REDELIVER_INTENT
w onStartCommand()
oddzwonieniu w mojej usłudze zamiast START_STICKY
tak, aby cała intencja została wysłana po ponownym uruchomieniu.
Nie zrobiłem tego początkowo, ponieważ obawiałem się, że jeśli usługa próbowała coś zrobić, to w połowie tego usługa została ponownie uruchomiona ... czy rozpozna, że zaczęła coś robić? Myślę, że to logika, za którą będę musiał być odpowiedzialny :)
intent
jestnull
włączonyonStartCommand()
, jest to spowodowane innym błędem, który jest wcześniej widoczny w LogCacie. Nie wiem dlaczego, ale właśnie to zauważyłem i dość łatwo to przeoczyć.NullPointerException
gdzieś w jednym z działań. Później był to inny błąd. Ale w obu przypadkach mój ślad stosu pokazał, że moja usługa - która była uruchomiona, gdy wystąpił ten błąd - miałaintent
taknull
jak w twoim przypadku. Dość długo zastanawiałem się, co jest nie tak, gdy zdecydowałem się przewinąć ślad stosu i okazało się, że gdzieś na górze mam swój prawdziwy błąd. Po rozwiązaniu tego,null
intent
zniknął również ten z .Odpowiedzi:
Dziwię się, że nie ma dyskusji na temat nadchodzących flag. Mam zamiar monitorować to w dziennikach za pomocą:
Aktualizacja: flagi były 0, więc nie było tam nic do podjęcia. Zostawiłem tam zerową odprawę bez utraty funkcji.
Edycja: Ok, znalazłem to w dokumentacji START_STICKY wszystkich miejsc! „Jeśli nie ma żadnych oczekujących poleceń uruchomienia, które mają być dostarczone do usługi, zostanie wywołana z obiektem o zerowej intencji, więc musisz uważać, aby to sprawdzić”.
http://developer.android.com/reference/android/app/Service.html
źródło
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. Pracował dla mnie. Ale wtedy oczywiście musisz poprawnie obsługiwać intencję zerową.But then of course you need to correctly handle null intent
; Co masz na myśli?! W jaki sposób? Dzięki.onStartCommand(intent: Intent?, ...)
powinno działać. A potem po prostu nie rób,intent!!
ale poprawnie sprawdź, czy intencja jest zerowa.