Сервис Android, уничтоженный с “больше, не хочет” - как перезапустить его?

У нас есть Сервис, который непрерывно собирает данные датчика по телефону. Эта услуга должна работать "навсегда", например, пока пользователь хочет, и не быть уничтоженным системой.

Для разъяснения не предназначается этот сервис, чтобы приложение было выпущено на рынке широкой публике, он записан для научных исследований. Таким образом, люди, запускающие приложение, полностью осведомлены, что их батарея будет высосанный пустой быстрее чем обычно, это не проблема.

Так или иначе моя проблема состоит в том, что сервис уничтожается через некоторое время выполнения. Иногда после часа, иногда только после как 7 Одера 10 часов.

Записи в журнале, когда сервис уничтожается, похожи на это. Это просто говорит, "больше не хотят", иногда даже не звоня onDestroy (), насколько я могу сказать.

07-20 17:07:11.593 I/ActivityManager(   85): No longer want my.project.datalogging (pid 23918): hidden #16
07-20 17:07:11.593 I/WindowManager(   85): WIN DEATH: Window{44c61570 my.project.datalogging/my.project.datalogging.DataLoggingApp paused=false}
07-20 17:07:11.603 I/BackgroundService(23925): onDestroy()

Или позже (после того, как я вручную перезапустил его):

07-20 19:00:49.677 I/ActivityManager(   85): No longer want my.project.datalogging:BackgroundService (pid 24421): hidden #17
07-20 19:00:49.677 I/ActivityManager(   85): No longer want my.project.datalogging (pid 24415): hidden #18
07-20 19:00:49.807    85 10707 I WindowManager: WIN DEATH: Window{44f1ea58 my.project.datalogging/my.project.datalogging.DataLoggingApp paused=false}

Я часто вижу, что другие сервисы быть уничтоженными с "больше не хотят" и затем сразу перезапущенный с "Планированием перезапуска разрушенного сервиса". Например, здесь с runkeeper:

07-20 17:30:45.503 I/ActivityManager(   85): No longer want com.fitnesskeeper.runkeeper (pid 24090): hidden #16
07-20 17:30:45.603 W/ActivityManager(   85): Scheduling restart of crashed service com.fitnesskeeper.runkeeper/.services.RunKeeperService in 5000ms
07-20 17:33:52.989 I/ActivityManager(   85): Start proc com.fitnesskeeper.runkeeper for service com.fitnesskeeper.runkeeper/.services.RunKeeperService: pid=24292 uid=10099 gids={3003, 1015}

Журналы не показывают записи низкой памяти. Тестирование сделано на (нескольких) Nexus One с 2,2 (Froyo FRF91).

Есть ли какой-либо способ, которым я могу достигнуть этого поведения со своим приложением? Автоматический перезапуск, будучи уничтоженным?

Или это это что-то полностью различное, которое просто выглядит подобным в logcat?

Если Вы больше нуждаетесь в информации, просто спрашиваете, и я попытаюсь обеспечить ее :-)

23
задан pableu 21 July 2010 в 07:48
поделиться

2 ответа

Как запустить службу? Вы пробовали startForeground () ? Конечно, это не абсолютная гарантия, но, по крайней мере, должно продлить срок службы.

14
ответ дан 29 November 2019 в 02:57
поделиться

Попробуйте переопределить метод onCreate() вашей службы. Если служба убита, а затем перезапущена, то вызывается onCreate(), но не onStart(). Поэтому вы можете, например, добавить вызов onStart() из onCreate, чтобы заставить его вести себя как RunKeeperService.

6
ответ дан 29 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: