我一直在使用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理想情况下应该用于根据某些系统警报执行单次任务。是否有我缺少的东西或实现此功能的替代方案。
答案 0 :(得分:0)
您可以使用AlarmManager
- 它有机会弱化设备并反复运行某些任务。
我确切地知道,但是假设当用户关闭屏幕时,所有任务都暂停,并且在设备休眠时无法执行任何代码。