Есть ли какая-либо другая причина, по которой намерение, которое передается onStartCommand(Intent, int, int)
, будет NULL, кроме перезапуска системы с помощью флага, такого как START_STICKY
?
Кроме того, когда служба перезапускается системой, Intent.getAction()
метод иногда возвращает NULL ... Намерение не равно NULL, простоgetAction()
Я тоже здесь спрашивал, но пока не получил ответа.
ОБНОВЛЕНИЕ : после разговора с Марком Мерфи он предложил мне вернуться START_REDELIVER_INTENT
в обратном onStartCommand()
вызове в моей службе вместо того, START_STICKY
чтобы все намерение отправлялось после перезапуска.
Я не делал этого изначально, потому что был обеспокоен тем, что если служба пытается что-то сделать, то в середине этого чего-то служба была перезапущена ... распознает ли она, что она начала что-то делать? Думаю, это логика, за которую я должен нести ответственность :)
intent
этоnull
наonStartCommand()
, это вызвано какой - либо другой ошибки , которая видна в LogCat до этого. Не знаю почему, но это то, что я наблюдал, и это довольно легко не заметить.NullPointerException
где-то в одном из Activity. Позже была другая ошибка. Но в обоих случаях моя трассировка стека показала, что моя служба - которая работала во время возникновения этой ошибки - имелаintent
то же самое, чтоnull
и в вашем случае. Я довольно долго думал, что случилось, когда решил прокрутить трассировку стека вверх и оказалось, что где-то наверху у меня была настоящая ошибка. После решения этогоnull
intent
пропал и тот, у которого .Ответы:
Я удивлен, что нет обсуждения входящих флагов. Я собираюсь отслеживать это в журналах следующим образом:
Обновление: флаги были равны 0, поэтому там не было никаких действий. Я оставил там нулевую проверку без потери функции.
Изменить: Хорошо, я нашел это в документации START_STICKY всех мест! «если в службе нет ожидающих команд запуска, она будет вызываться с объектом с нулевым намерением, поэтому вы должны проверить это».
http://developer.android.com/reference/android/app/Service.html
источник
override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {}
Intent?
. Работал у меня. Но тогда, конечно, вам нужно правильно обрабатывать нулевое намерение.But then of course you need to correctly handle null intent
; Что вы имеете в виду?! Как? Спасибо.onStartCommand(intent: Intent?, ...)
это должно работать только в вашем коде . А затем просто не делайте этого,intent!!
а правильно проверьте, является ли намерение нулевым.