Проверяйте местоположение каждые 15 минут, даже если приложение находится на переднем плане или отключено - PullRequest
0 голосов
/ 06 августа 2020

У меня есть требование, согласно которому мое приложение android должно проверять местоположение каждые 15 минут и обновлять его до SQLite DB. Этот процесс должен произойти, даже если приложение удалено из фона. Я пробовал все следующие способы, но ни один из них не работает, когда приложение работает долгое время.

  1. Запускаемая функция с помощью службы переднего плана. Ниже приведен пример
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 разряжает батарею, и, скорее всего, ОС может убить мое приложение.

Может ли кто-нибудь предложить лучший способ решения этой проблемы?

1 Ответ

0 голосов
/ 06 августа 2020

WorkManager и AlarmManager на самом деле являются наиболее эффективными способами планирования некоторых задач в вашем приложении, но у вас просто есть требования, которые не расходуют заряд батареи и никогда не будут ... отслеживание местоположения и " "пробуждение" устройства каждые 15 минут приведет к сильному разряду батареи, и я сомневаюсь, что вы сможете это предотвратить

...