Каков наилучший способ запланировать задачу, которая гарантированно будет выполняться в ближайшее время в Android?

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


person Robin    schedule 12.01.2012    source источник


Ответы (1)


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

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

person Jin35    schedule 12.01.2012