Я использую Timer & TimerTask с псевдокодом: -
samplingTask = new TimerTask() {
public void run() {
collectSample();
}
};
timer.schedule(samplingTask, 60*1000, 60*1000); //1 min
Это приложение работает долго (например, 15 минут без пробуждения и экран выключен). После планирования этой задачи я блокирую экран, и телефон находится в движении (с активированным диспетчером датчиков для акселерометра). Итак, в идеале эта задача должна выполняться каждую минуту. Однако в журналах я вижу, что запланированный таймер был запущен только на 5-й, 9-й и 12-й минутах.
FINER: (13,Timer-0,Workout)In Timertask, nth minute=5
FINER: (13,Timer-0,Workout)In Timertask, nth minute=9
FINER: (13,Timer-0,Workout)In Timertask, nth minute=12
Мое требование - выборка с критичным временем с допустимым диапазоном задержки в несколько секунд (1-5 секунд). Похоже, что если устройство находится в спящем режиме, таймер не активирует его и не запускает запланированную задачу. Есть ли другая альтернатива этому? Документация говорит, что можно использовать AlarmManager и Handler. Я думаю, что в идеале AlarmManager следует использовать для выполнения задачи одиночного выстрела на основе некоторой системной тревоги. Есть ли что-то, чего мне не хватает или какая-то альтернатива для достижения этой функциональности.