2

目前我有一个应用程序,它设置在两个部分中,活动部分将任务和任务完成时间添加到数据库中,然后我有一个在后台运行的服务,轮询数据库并在达到任务完成时间时处理任务。

目前我的服务正在使用扩展线程的私有内部类,并且我正在使用 thread.sleep 重新运行任务处理方法。这个内部类是从服务类中的 onStartCommand() 调用的。thread.sleep 设置为 15 分钟,或者如果需要在此之前处理任务,它将休眠直到需要处理该任务的时间。此时一切正常,但是我遇到了一些问题。

  1. 该服务需要在特定时间运行,这些时间总是根据需要完成任务的时间而变化,即使手机进入睡眠状态也是如此。

  2. 我需要确保对电池的影响尽可能小。

现在通过研究,我发现通过使用警报管理器,我只能在需要时启动此服务,这很好,但是因为我会根据必须处理某些任务的时间不断改变时间间隔,我不是肯定这是正确的做法。

我还阅读了有关唤醒锁的信息,除非我绝对需要,否则我真的不想使用。

我或多或少地在寻找关于我应该如何在我的应用程序中构建服务以及它如何处理这些任务的建议。

4

1 回答 1

1

现在通过研究,我发现通过使用警报管理器,我只能在需要时启动此服务,这很好,但是因为我会根据必须处理某些任务的时间不断改变时间间隔,我不是肯定这是正确的做法。

AlarmManager绝对是正确的解决方案。始终保持服务处于活动状态,主要是看时钟滴答作响,这是非常浪费 RAM 的。

您不会“不断地更改时间间隔”,因为您只会有一个警报事件,设置为每当下一个任务发生时。那将是一次性警报,而不是重复警报。当事件发生时,除了做工作之外,您还要安排下一个事件。唯一的边缘情况是,如果用户添加的任务比以前最快的任务完成得更快,在这种情况下,您将需要取消并重新安排该警报事件。

我还阅读了有关唤醒锁的信息,除非我绝对需要,否则我真的不想使用。

AlarmManager如果您想确保可以不间断地进行定期工作,您没有选择,对于您的当前或实施。目标是仅WakeLock在实际工作脉冲期间激活,并在该WakeLock工作脉冲完成时释放并关闭服务。您可以WakefulIntentService.

于 2013-01-02T21:35:15.450 回答