Android-приложение теряет звук / время, когда телефон находится в режиме ожидания / ожидания
Несколько лет назад я написал приложение для Android, которое выполняет довольно простой процесс. Я установил ряд условий, состоящий из различных шагов (ходьба, бег трусцой, спринт) со временем, связанным с каждым сегментом: прогулка 1 мин, работа 2 мин, спринт 3 мин. Когда я нажимаю кнопку "Перейти", приложение отображает таймер обратного отсчета для каждого сегмента, полный таймер времени и темп (с использованием GPS). Дисплей есть, но главная особенность в том, что приложение использует звук, чтобы сказать мне долго, до следующего перехода и что будет дальше.
Например, когда он запускается, он издает звук каждую секунду в течение 5 секунд, а затем говорит "2 минуты". На отметке 30 секунд будет слышен звук. Через 1 минуту он скажет "1 минута", другой звук через 30 секунд, затем за 10 секунд до изменения темпа, он скажет "Следующая нога (бег) (или прогулка или спринт)" и воспроизведет звук последние 5 секунд. Таким образом, мне не нужно смотреть на дисплей, чтобы узнать, где я нахожусь в созданной мной программе условий.
проблема: когда я создал это и запустил его, я запустил две версии Android по сравнению с текущей версией, которую я теперь имею (8.1.0), и теперь я запускаю его на LG Stylo 4. Тогда устройство переходило в режим сна / ожидания В этом режиме экран автоматически гаснет, или я нажимаю кнопку питания, и приложение продолжает работать нормально. Время тянет время, звуки будут издаваться вовремя.
Это первый раз, когда я установил и запустил свое приложение на новом телефоне / ОС, и, скажем так, оно не прошло успешно. В какой-то момент мне показалось, что у меня осталось 30 секунд, и я не слышал ничего больше минуты. Похоже, что приложение теперь наполовину приостанавливается, например, 30 секунд превращаются в более чем 1 минуту, и на переходах нет звука.
Что-то изменилось с Android, похоже, этого не случалось в прошлых выпусках. Я хочу, чтобы программа продолжала работать в режиме реального времени, когда устройство переключается в спящий режим, и пока я читал об исключении приложения из режима экономии заряда аккумулятора, это не сработало.
Каким образом я могу поддерживать это приложение в фоновом режиме, вести обратный отсчет и издавать звуки, даже когда телефон находится в спящем режиме.
- Версия ОС 8.1.0
- Ядро 3.18.71
- сборка OPM1.171019.019
- Устройство: LM-Q710TS (LG Stylo 4)
Конкретный код в вопросе это:
//runs without a timer by reposting this handler at the end of the runnable
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {
@Override
public void run() {
// do something here to display
processTime(); // process what to be done on a sec by sec basis
try {
timerHandler.postDelayed(this, 1000);
} catch (Exception ex){
}
}
};
Я видел сообщение, в котором говорилось об использовании частичного wakelock или, возможно, другой версии таймера, но я не могу найти его сейчас. Надеюсь, есть прямой ответ на эту загадку.