Запустить службу в фоновом режиме навсегда ..? Android - PullRequest
9 голосов
/ 24 февраля 2010

Я занимаюсь исследованием заряда аккумулятора телефона Android. Я хочу запускать проверку батареи каждые 10 минут, пока батарея полностью не разрядится. У меня были проблемы, чтобы заставить его работать.

При первой попытке я использую таймер в классе обслуживания и планирую проверку батареи каждые 10 минут. Но вскоре я обнаружил, что сервис останавливается, когда экран выключается.

Затем я пытаюсь использовать AlarmService, я использую тревожный вызов, чтобы разбудить мой сервис каждые 10 минут, проверить уровень заряда батареи и сохранить данные в файл на SD-карте. Работает с выключенным экраном. Тем не менее, я получил данные только за 9 часов ... кажется, что AlarmService останавливается в какой-то момент через несколько часов. Я не знаю, почему это так, система убила его из-за проблем с памятью?

Так что мой вопрос: кто-нибудь написал какой-нибудь сервис для запуска (как навсегда) в фоновом режиме раньше? Как ты это делаешь, и я очень признателен за пример кода?

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

Большое спасибо, и я надеюсь, что смогу получить здесь несколько полезных ответов.

Ответы [ 2 ]

10 голосов
/ 24 февраля 2010

С первой попытки я использую таймер в класс обслуживания и график проверка батареи каждые 10 минут. Но вскоре Я обнаружил, что служба была приостановлена когда экран гаснет.

Вы, вероятно, не держали WakeLock, поэтому устройство заснуло.

похоже, что AlarmService останавливается на какой-то момент через несколько часов

Я скорее сомневаюсь.

Так что мой вопрос, кто-нибудь написал какой-то сервис для запуска (как навсегда) в фон раньше?

Невозможно создать службу, которая будет работать вечно. Должно быть возможно создать запланированное задание через AlarmManager, которое будет вызываться «навсегда».

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

Я не уверен, что это такое. Но если вы хотите держать устройство в активном состоянии - будь то при первом приближении или просто во время выполнения работы, вызванной AlarmManager - вам нужно удерживать WakeLock.

Вот проект , который выполняет почти то же, что вы описываете для AlarmManager, минус проверка уровня заряда батареи, но использование WakefulIntentService для обеспечения непрерывной работы устройства. Если вы не можете заставить этот код работать до тех пор, пока не отключится батарея, присоединитесь к cw-android Google Group и сообщите свои результаты, и я посмотрю на него.

2 голосов
/ 24 февраля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...