Служба переднего плана вызывает перезагрузку телефона - почему?

Краткая версия: перезагружает ли Android телефон (буквально перезагружает), чтобы избавиться от служб переднего плана? Если да, то в каких случаях?

Расширенная версия: я написал службу GPS, которая регистрирует себя как службу переднего плана (в данном случае это хорошая идея - когда я запускаю ее, это самая важная вещь в моем телефоне;)) . Во время тестирования этот сервис является большим потребителем ресурсов - он каждую секунду получает данные GPS и записывает их в файл SQLite DB на SD-карте. Позже я буду использовать внутреннюю память и увеличу время опроса, но пока мне нужны тестовые данные.

Сервис работает по назначению. Я создал действие, которое запускает и останавливает его, и результаты выглядят нормально. Но когда я оставил его включенным, телефон через некоторое время (полчаса или около того) перезагрузился сам. Поскольку я никогда не замечал этого при нормальном использовании, я приписываю это своей службе. Однако я понятия не имею, что вызывает это - следует ли запрашивать активацию ЦП? (если это проблема, разве телефон просто не выключится?) Не хватило ли памяти? Я использовал слишком много батареи? (он был наполовину заполнен) Есть ли журнал, в котором я могу проверить, почему перезагружался телефон?

Среда: Xperia X10, Android 2.3.3.


person johndodo    schedule 28.05.2012    source источник
comment
Android перезагружает телефон (буквально перезагружает), чтобы избавиться от служб переднего плана? - AFAIK, нет. Я предполагаю, что вы споткнулись о какой-то ошибке прошивки вашего устройства.   -  person CommonsWare    schedule 28.05.2012
comment
Я этого боялся, спасибо! Постараюсь потом дальше отлаживать. Не хотите ли опубликовать это как ответ, чтобы я мог его принять? Кстати, отличная книга (Руководство для профессиональных программистов по разработке под Android)! :)   -  person johndodo    schedule 29.05.2012
comment
Готово, спасибо за добрые слова!   -  person CommonsWare    schedule 29.05.2012
comment
Вы пробовали просматривать показатели своего приложения с помощью диспетчера задач, например System Tuner? Он сообщит вам в режиме реального времени, сколько процессора и памяти он потребляет и как долго.   -  person IgorGanapolsky    schedule 28.09.2012


Ответы (3)


AFAIK, нет. Это было бы чрезмерно сурово для пользователя. В службе переднего плана нет ничего, что каким-то образом мешало бы ОС завершить свой процесс, как и любой другой.

Я предполагаю, что вы споткнулись о какой-то ошибке прошивки вашего устройства.

person CommonsWare    schedule 29.05.2012

Как говорили другие, Android не перезагружает телефон, чтобы избавиться от служб переднего плана. Наиболее частые причины, с которыми я столкнулся:

  • Паника ядра из-за ошибки в драйверах, повреждения памяти и т. Д.
  • Watchdog убивает основной поток из-за тупиковой ситуации, что приводит к перезапуску Zygote, что почти похоже на перезагрузку с точки зрения пользователя.

Без подробностей и журналов остается только предположение. Тем не менее, похоже, что ваш Service потребляет много ресурсов, это может вызвать вызов Watchdog на SystemServer потоке, что приведет к перезагрузке.

person Andrey Ermakov    schedule 29.05.2012

Взято из документов Android:

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

person IgorGanapolsky    schedule 28.09.2012