Причины, что принятое намерение будет NULL в onStartCommand
Есть ли другая причина, согласно которой Intent, переданный в onStartCommand(Intent, int, int)
, должен быть NULL, кроме перезапуска системы через флаг, например START_STICKY
?
Кроме того, когда служба перезапускается системой, метод Intent.getAction()
возвращает NULL... иногда. Намерение не равно NULL только getAction()
Я спросил здесь, но еще не получил ответа.
ОБНОВЛЕНИЕ. После общения с Марком Мерфи он предложил мне вернуть START_REDELIVER_INTENT
в обратном вызове onStartCommand()
в моей службе вместо START_STICKY
, чтобы все намерение было отправлено после перезапуска,
Я не делал этого изначально, потому что меня беспокоило, что если служба пытается что-то сделать, то в середине того, что-то было перезапущено, будет признано, что он начал что-то делать? Я думаю, что это логика, я должен буду отвечать за:)
Ответы
Ответ 1
Я удивлен, что нет обсуждения входящих флагов. Я собираюсь отслеживать это в журналах со следующим:
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;
}
Обновление: флаги были 0, поэтому там ничего не действовало. Я оставил нулевую проверку там без потери функции.
Изменить: Хорошо, я нашел его в документации START_STICKY из всех мест! "если в службу не будут отправляться ожидающие стартовые команды, они будут вызваны с объектом нулевого намерения, поэтому вы должны позаботиться об этом".
http://developer.android.com/reference/android/app/Service.html