目前我有一个设置在两个部分的应用程序,活动部分将任务和任务完成时间添加到数据库,然后我有一个在后台运行的服务轮询数据库并在任务完成时间处理任务到了。
目前我的服务是使用扩展线程的私有内部类,我正在使用thread.sleep来重新运行任务处理方法。从服务类中的onStartCommand()调用此内部类。 thread.sleep设置为15分钟,或者如果在此之前需要处理任务,它将一直处于休眠状态,直到需要处理此任务为止。此时一切正常,但是我遇到了一些问题。
服务需要在特定时间运行,这些时间总是在变化,具体取决于即使手机进入睡眠状态,任务需要完成的时间。
我需要确保对电池的影响尽可能小。
现在通过研究我发现,通过使用报警管理器,我只能在需要时启动此服务,这很好,但是因为我会根据必须处理某些任务的时间不断更改时间间隔我不确定这是正确的行动方案。
我还读过关于唤醒锁的内容,除非我绝对需要,否则我真的不想使用它。
我或多或少都在寻找有关如何在我的应用中构建服务以及如何处理这些任务的建议。
答案 0 :(得分:1)
现在通过研究我发现,通过使用报警管理器,我只能在需要时启动此服务,这很好,但是因为我会根据必须处理某些任务的时间不断更改时间间隔我不确定这是正确的行动方案。
AlarmManager
绝对是正确的解决方案。保持服务一直处于活着状态,主要是看着时钟滴答,令人尴尬地浪费了RAM。
您不会“不断更改时间间隔”,因为您只会有一个警报事件,设置为每当下一个任务发生时。这将是一次性警报,而不是反复发出的警报。事件发生时,除了完成工作外,还可以安排下一个事件。唯一的优势是,如果用户添加的任务比之前最快的任务更快完成,在这种情况下,您将需要取消并重新安排该警报事件。
我还读过关于唤醒锁的内容,除非我绝对需要,否则我真的不想使用它。
如果您想确保可以不间断地进行定期工作,那么您无法选择当前或AlarmManager
实施方式。目标是在实际工作脉冲期间只有一个活跃的WakeLock
,并释放WakeLock
并在完成工作脉冲时关闭服务。您可以看到此模式的实现in WakefulIntentService
。