Это ошибка в Android 2.3 (API уровня 9), которая была исправлена в API уровня 10.
От Dianne Hackborns Пост по этой проблеме :
Хорошо, это действительно сломалось в 3.3. [Так!] Изменение было с августа
прошлый год. Это изменение, которое сломало его:
https://android.googlesource.com/platform/frameworks/base/+/5474b0f8603ee66413c3e44600ca46f162f3089e
Обратите внимание, что ранее ссылка git commit не работала. Нажмите здесь, чтобы получить рабочее зеркало-ссылку на коммит и строку, которая вызывает ошибку.
Также она имела в виду 2,3, но написала 3,3. Она позже исправила это и предложила обходной путь:
Извините, да, я имел в виду 2,3.
Это было в кодовой базе с момента выпуска кода GB, поэтому
будет кто знает, какие устройства поставляются с ним.
Проблема в не в том, что службы не перезапускаются, только в этом
их onStartCommand () не вызывается с нулем в это время.
Метод onCreate () по-прежнему вызывается. В качестве обходного пути вы можете
возможно, просто опубликуйте сообщение в onCreate () и установите флаг в
onStartCommand (); если вы не получили onStartCommand ()
Если сообщение обработано, вы, вероятно, не получите
нулевой намеренный вызов. (Если вам нужно сделать это вообще ... вообще
для таких вещей, как регистрация получателей, вы действительно хотите сделать
это в onCreate (), так как этот метод вызывается только один раз.)
Она также написала , что это поведение будет исправлено в следующем обновлении платформы (после 3.0):
Я исправлю это в следующем обновлении платформы (после Android 3.0);
к сожалению, этот код уже давно отсутствует в исходном дереве,
и в паре релизов сейчас, так что нам нужно жить с разбитым
поведение на этих версиях. У службы все еще будет свой onCreate ()
называется, чтобы вы могли работать там.
Я предполагаю, что уровень API, который она имела в виду, был 10, , и я могу подтвердить, что onStartCommand()
вызывается с нулевыми намерениями после перезапуска службы при переключении с уровня API 9 на 10.