Android: сервис переднего плана против wakeLock - PullRequest
11 голосов
/ 02 февраля 2012

Я относительно новичок в Android, поэтому то, что я спрашиваю, может показаться очевидным (хотя я прочитал все вопросы с одинаковыми названиями и много искал). Мне нужно постоянно следить за акселерометром в течение длительного времени. Было предложено два подхода:

1) получить частичную блокировку следа, которая удерживается все время контроля акселерометра; и

2) контролировать акселерометр в режиме приоритетного обслуживания.

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

Ответы [ 2 ]

5 голосов
/ 13 августа 2012

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

ОС Android создана для обмена процессами на основе множества факторов. Это означает, что ваш процесс в любой момент может быть убит Android, и он предоставляет платформу, которая поможет вам, разработчику, гарантировать, что ваше приложение может сохранять и восстанавливать свое состояние, когда это происходит.

A WakeLock просто предотвращает спящий процессор, что помогает экономить заряд батареи, когда телефон не используется.

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

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

Чего вы пытаетесь достичь здесь? Зачем следить за приборами акселерометра? Возможно, вам следует отслеживать его только тогда, когда Activity вашего приложения находится на переднем плане.

1 голос
/ 07 марта 2013

У меня была точно такая же потребность и проблема.Я считаю, что решение состоит в том, чтобы использовать как частичную блокировку, так и службу переднего плана.Android будет пытаться не убивать фоновый сервис, который удерживает блокировку после пробуждения, но может убить его, когда ему нужны ресурсы, и, возможно, перезапустить его позже.Это хорошо для многих целей, но, по крайней мере, в моем случае этого недостаточно.Перевод сервиса в состояние переднего плана - это способ сообщить Android, что его уничтожение недопустимо.Да, это может все же произойти в экстремальных ситуациях, но теперь это будет нарушением контракта API, тогда как с помощью фоновой службы Android может убить его.Поэтому вы, вероятно, должны кодировать так, как будто это никогда не произойдет, но просто знайте, что это возможная, но, вероятно, редкая ошибка.

...