Получение PARTIAL_WAKELOCK каждые 10 секунд
Есть ли проблемы с приложением, которое получает частичную блокировку после 10-секундного интервала. Мой вариант использования для этого заключается в возможности постоянного отслеживания движения пользователя через акселерометр устройства. По сути, у меня есть служба, которая вызывается по тревоге каждые 10 секунд.
Эта служба получает блокировку следа, получает некоторые показания акселерометра для определения текущего состояния движения, а затем снимает блокировку следа. Общее время службы составляет около 4 секунд.
Насколько я понимаю, это приводит к тому, что устройство бодрствует в течение примерно 24 секунд каждую минуту. Хотя это и не идеально, я хотел бы надеяться, что это все же лучшая практика, чем постоянная блокировка следа в течение всего срока службы моего приложения.
С другой стороны, возможно ли, что действие по сбору и снятию блокировщика следа в такой короткий промежуток времени так же плохо сказывается на сроке службы батареи?
Любой вклад приветствуется.
2 ответа
Как отмечалось в комментариях, это действительно не очень хорошая идея. Как и в "однозвездных рейтингах на рынке", типа не очень хорошая идея.
Акселерометр предназначен для беговой деятельности (например, игры), и это все. Он абсолютно не предназначен для использования в режиме, в котором вы пытаетесь.
Вы также предполагаете, что устройство засыпает сразу после вашего освобождения WakeLock
, Это может или не может быть правдой. Я подозреваю, что вы обнаружите, что вы заставляете процессор включаться значительно дольше, чем на 40% доступного времени, даже если вы только обязываете его включать на 40%.
Я настоятельно рекомендую вам ознакомиться с презентацией Джеффа Шарки об энергопотреблении в Android на конференции Google I | O 2009 года.
Вы когда-нибудь использовали приложение MyTracks? http://code.google.com/p/mytracks/
В последний раз, когда я проверял, они используют блокировку пробуждения, когда у пользователя есть активный путь.
У меня та же проблема, что и у вас - и хотя я предпочел бы не использовать блокировку от пробуждения, мое приложение разрушается, если ОС по пути убивает приложение. Прямо сейчас мы делаем это, затрачивая около 10% времени автономной работы в час - что не так уж и плохо. Это конечно не здорово, но наш средний путь составляет всего около 20 минут. И это работает.
Использование Alarm Manager кажется лучшим маршрутом. Какие-нибудь хорошие примеры того, как использовать это для такой ситуации?