2013-12-16 5 views
2

У меня есть одно приложение процесса, которое включает в себя компонент службы (запускаемый активностью и работает все время) с несколькими потоками. Мне нужно приложение для повторного приостановления (глубокого сна) в течение 7 секунд, а затем для запуска акселерометра в течение очень короткого периода времени (акселерометр остановлен после сбора 20 отсчетов), чтобы сэкономить на батарее. Он должен работать на всех платформах для Android, предпочтительно выше 2.3.сохранение батареи и производительность AlarmManager

Мой первый подход состоял в том, чтобы реализовать таймер в компоненте службы с использованием метода sendMessageDelayed на основе обработчика (delay = 7 секунд), который вызывается после того, как акселерометр остановлен, не получая частичную блокировку слежения. Однако мне кажется, что это не очень хороший подход, потому что таймер учитывает только тики, когда телефон не спит (пожалуйста, поправьте меня здесь, если я ошибаюсь или есть решение этой проблемы).

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

Так вот несколько вопросов:

  1. Должен ли я использовать AlarmManager огонь передач каждые 7 секунд? Я обеспокоен тем, что 7 секунд - слишком короткое время для AlarmManager, потому что он внутренне приобретает частичный wakelock в течение значительного времени. Интересно, выполнил ли кто-нибудь анализ производительности за максимальное время, которое Wakelock будет получать AlarmManager, или имеет альтернативный подход. Я читал другие сообщения, в которых говорилось, что AlarmManager - эффективное решение, но оно особенно полезно в течение длительных периодов времени.

  2. Если необходимо использовать AlarmManager, я могу получить частичный вакелон в широковещательном приемнике, используя объект wakelock, который поддерживается как общедоступное статическое поле в компоненте службы (поэтому его легко получить из любого другого компонента в приложении)?

  3. Также есть ли какие-либо проблемы с доступом и использованием объекта на основе Handler от широковещательного приемника, чтобы уведомить об этом поток услуг, который был принят в виде сигнала тревоги? (Объект обработчика поддерживается как статическое общедоступное поле в компоненте службы, поэтому он легко доступен из любого другого компонента приложения).

Большое спасибо за вашу помощь

+0

Решено ли? Если да, можете ли вы написать свое решение в качестве ответа? – ransh

ответ

0

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

+0

Спасибо за ваш комментарий. Я думал, что мне нужен AlarmManager, потому что я хочу приостановить работу службы в течение 7 секунд, а затем запустить ее с частичной блокировкой слежения. К сожалению, мне нужен частичный wakelock, потому что в противном случае акселерометр не даст хороших результатов. – user3107977