我已经浏览了各种讨论线程并尝试了多次迭代,以便我的应用程序安排以固定的时间间隔重复运行。我也取得了成功,但是开始了解事情是如何运作的。
我曾尝试使用ScheduledExecutorService和TimerTask进行实现,并且两者都没有以正确的时间间隔触发我的任务。但是在AlarmManager中找到了成功。
请指导我正确的方向,以了解为什么时间安排与ScheduledExecutorService和TimerTask无效。
应用程序需要定期执行任务。比如说,我的任务大约需要5分钟才能完成,我希望将其安排好,以便每30分钟运行一次。当我使用ScheduledExecutorService或TimerTask构建应用程序时,我发现它不会在30分钟时触发任务,但会在1小时甚至更长时间内触发。到目前为止,使用报警管理器,似乎工作正常,大约30分钟触发(仍然发现轻微变化,但优于其他两个)。
答案 0 :(得分:0)
当我使用ScheduledExecutorService或TimerTask构建应用程序时,我发现它不会在30分钟时触发任务,但会在1小时甚至更长时间内触发。
更重要的是,一旦您的流程终止,它就不会触发,这可能在任何时候发生,并且从用户的角度来看,应该快速发生,以释放其他应用程序的RAM。
您的触发延迟可能是由于设备进入睡眠状态。您的解决方案不仅会占用用户的RAM,还会要求您防止设备入睡,这对电池寿命来说非常糟糕。
AlarmManager
是一个更合适的解决方案,因为它不需要您保持服务运行或以其他方式进行处理。请务必使用WakefulBroadcastReceiver
作为回复_WAKEUP
事件的方式,因为设备会想要重新入睡。