Причины, по которым переданный Intent будет равен NULL в onStartCommand - PullRequest
92 голосов
/ 07 декабря 2011

Существует ли какая-либо другая причина, по которой намерение, переданное onStartCommand(Intent, int, int), будет равно NULL, кроме того, что система перезапускает службу с помощью флага, такого как START_STICKY?

Кроме того, когда служба перезапускается системой, метод Intent.getAction() возвращает NULL ... иногда. Намерение не NULL просто getAction()

Я тоже спросил здесь , но пока не получил ответа.

ОБНОВЛЕНИЕ : После общения с Марком Мерфи он предложил мне вернуть START_REDELIVER_INTENT в обратном вызове onStartCommand() в моем сервисе вместо START_STICKY, чтобы все намерения отправлялись после перезапуска.

Сначала я этого не делал, потому что был обеспокоен тем, что если служба пытается что-то сделать, то в середине чего-то служба была перезапущена ... узнает ли она, что она начала что-то делать? Я предполагаю, что это логика, за которую я должен быть ответственен:)

1 Ответ

46 голосов
/ 19 декабря 2013

Я удивлен, что нет обсуждения входящих флагов.Я собираюсь следить за этим в журналах со следующим:

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 всех мест!«если нет ожидающих выполнения команд запуска, которые будут доставлены в службу, она будет вызываться с объектом с нулевым намерением, поэтому вы должны позаботиться об этом».

...