У меня есть требование, согласно которому мое приложение android должно проверять местоположение каждые 15 минут и обновлять его до SQLite DB. Этот процесс должен произойти, даже если приложение удалено из фона. Я пробовал все следующие способы, но ни один из них не работает, когда приложение работает долгое время.
- Запускаемая функция с помощью службы переднего плана. Ниже приведен пример
mHandlerTask = new Runnable() {
@Override
public void run() {
doCheckLocation();
mHandler.postDelayed(mHandlerTask, 60000 * 15);
}
};
mHandler.postDelayed(mHandlerTask, 60000 * 15);
Это работает нормально, но если экран выключен, этот runnable не запускается. Думаю, это из-за режима сна.
Диспетчер работ с Periodi c Запрос на работу: он также не срабатывает, когда устройство переходит в режим ожидания / экран выключается.
Диспетчер аварийных сигналов: у него мало функции setExactAndAllowWhileIdle()
, setAlarmClock()
для срабатывания в точное время. Но расход заряда батареи очень высокий, и телефон нагревается, если я использую setAlarmClock()
.
Так что я хочу попробовать с блокировкой пробуждения. Когда экран выключается, я его приобретаю. Я отпущу, когда экран включится. Но wake lock разряжает батарею, и, скорее всего, ОС может убить мое приложение.
Может ли кто-нибудь предложить лучший способ решения этой проблемы?