Сборщик данных фонового датчика в Android - PullRequest
3 голосов
/ 11 декабря 2010

Я сейчас программирую программу, которая собирает данные датчика, например, значения акклерометра за целый день.

Текущий Я просто использую Активность и запускаю активность в течение всего дня (я автоматически отключаю экран черного цвета) и не делаю коротких сообщений или телефонных звонков в течение дня.

Я слышал, что могу создать такой долго работающий сборщик данных в фоновом режиме, используя Service.Но после того, как я проверил шагомер на http://code.google.com/p/pedometer/., я обнаружил, что, когда экран отключается, шагомер не работает.(Но приложение, подобное предометру, должно работать в любом случае, пока включено питание.)

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

Я думаю о двух способах:

1. Однако, используя Сервис, как показало приложение шагомера.Когда экран отключается, служба перестает работать!Может быть, в коде есть ошибки.

2.Мое приложение по-прежнему является Activity.Но я изменяю свет scrren на 0 или полностью черный для экономии энергии.

Мой вопрос заключается в том, что: 1) есть ли у Сервиса возможность работать всегда, даже если экран отключается в течение длительного времени;Для 2, как изменить подсветку экрана?

Спасибо!

Ответы [ 3 ]

6 голосов
/ 11 декабря 2010

относительно 1 - вам нужен удаленный сервис. Это сервис, почти аналогичный «локальному» сервису (который используется в примере с шагомером), но он может работать, даже если к нему не привязано никаких действий, в фоновом режиме. Вы можете отключить экран, и даже активность может завершиться сбоем (в плохом случае;)), но служба продолжает работать, если вы запустили ее с помощью startService (...) вместо bindService (...).

попробуйте пройти через это и посмотрите, поможет ли это.

относительно 2 - вы действительно должны использовать (1);)

3 голосов
/ 19 сентября 2012

Вам не нужна удаленная служба - это можно сделать с помощью локальной Service.

Используйте шаблон команды вместо шаблона привязки для службы, т.е. используйте startService() / stopService() вместо bind() / unbind().

В методе службы onStartCommand() верните Service.START_REDELIVER_INTENT или что-то подобное, чтобы служба работала дольше, чем Activity.

Теперь хитрость: Чтобы правильно поддерживать обработку службы, когда телефон переходит в спящий режим, вам нужно работать с PowerManager.WakeLock . Это довольно сложно понять, и я не думаю, что в этом ответе нужно полное объяснение.

Вот еще немного информации:


Извиняюсь за краткий ответ, но ваш вопрос довольно широк с точки зрения того, что он затрагивает некоторые сложные темы.

0 голосов
/ 23 декабря 2013

Фоновая служба может быть реализована с IntentService для большинства сценариев.

Убедитесь, что фоновая служба работает в последней и более ранней версии Android, например 2.3 или 2.2.

Проектирование фоновых операций отличается от Android 4.0.

Лучшие практики для фоновых заданий

Выполнение сетевых операций

...