Хорошо, так что я нашел ответ, я думаю, что мой вопрос был немного запутанным, поэтому я постараюсь ответить на различные части, а также добавить свое реальное решение ....
У меня был Activity
, который начинал Service
.Service
(который включал AsyncTask
) должен был работать в фоновом режиме, следя за акселерометром и отсчитывая таймер.Затем Service
периодически отправлял широковещательную рассылку Intent
на Activity
, когда в широковещательной рассылке содержались определенные данные, Activity
требовалось выполнить некоторый код.Все это должно было произойти с выключенным экраном.
Мои выводы заключаются в том, что, да, при нажатии блокировки экрана Activity
действительно запускает onPause()
, но все еще полностью в состоянии выполнить код во внутреннемBroadcastReciever
класс, и, следовательно, это может вызвать методы в основной процесс деятельности.Я думаю, что это плохой способ сделать что-то, но это сработало.
Проблема была в AsyncTask
и Service
.Независимо от того, как он настроен (startForegrond()
и т. Д.), Фоновый поток будет приостановлен на некоторое время, когда процессор выключится (либо нажатием клавиши блокировки, либо ожиданием тайм-аута экрана).Я обнаружил, что он был приостановлен с интервалами около 1 минуты.
Ответ - использовать PowerManager.WakeLock
и установить флаг на PARTIAL_WAKE_LOCK
.Это позволит экрану закрыться, но фоновые потоки будут работать на полной скорости в фоновом режиме.
Док. Здесь: http://developer.android.com/reference/android/os/PowerManager.html
не забудьте отпустить его, когда закончите как естьдорого на аккумуляторе.