Каков наилучший способ запланировать задачу, гарантированно выполняемую в почти запланированное время в Android? - PullRequest
3 голосов
/ 12 января 2012

Я использую 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 следует использовать для выполнения задачи одиночного выстрела на основе некоторой системной тревоги. Есть ли что-то, чего мне не хватает или какая-то альтернатива для достижения этой функциональности.

1 Ответ

0 голосов
/ 12 января 2012

Вы можете использовать AlarmManager - у него есть возможность ослабить устройство и запустить какое-то задание несколько раз.

Я точно не знаю, но, предположим, когда пользователь выключает экран, все задания приостанавливаются и могутне делать никакого кода, пока устройство спит.

...