У нас есть служба, которая постоянно собирает данные датчиков на телефоне.Этот сервис должен работать «навсегда», например, столько, сколько хочет пользователь, и не должен быть убит системой.
Для пояснения, этот сервис не предназначен для выпуска приложенияна рынке для широкой публики, это написано для научного исследования.Таким образом, люди, работающие с приложением, полностью осознают, что их батарея будет разряжаться быстрее, чем обычно, и это не проблема.
В любом случае, моя проблема в том, что служба убита через некоторое время работы.Иногда через час, иногда только через 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?
Если вам нужна дополнительная информация, просто спросите, и я постараюсь предоставить ее: -)