3

我一直在使用带有伪代码的 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 应该理想地用于基于某些系统警报执行单次任务。是否有我遗漏的东西或实现此功能的替代方法。

4

1 回答 1

0

您可以使用AlarmManager- 它有机会削弱设备并重复运行某些任务。

我不确切知道,但是假设当用户关闭屏幕时,所有任务都暂停并且不能执行任何代码,而设备睡眠。

于 2012-01-12T06:53:26.460 回答