Сборщик данных датчика фона в Android

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

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

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

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

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

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

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

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

Спасибо!


person Yin Zhu    schedule 11.12.2010    source источник


Ответы (3)


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

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

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

person mad    schedule 11.12.2010
comment
обратите внимание, что фоновая служба, собирающая данные датчиков в течение всего дня, разряжает вашу батарею. вы должны убедиться, что служба не работает непреднамеренно (возможно, с небольшим приятным уведомлением на панели задач) - person mad; 11.12.2010

Вам не нужен удаленный сервис — это можно сделать с помощью локального Service.

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

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

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

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


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

person Richard Le Mesurier    schedule 19.09.2012

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

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

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

Рекомендации по фоновым заданиям

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

person Sree Rama    schedule 23.12.2013