【问题标题】:Android Service with AlarmManager Advice带有 AlarmManager 建议的 Android 服务
【发布时间】:2013-01-02 20:38:08
【问题描述】:

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

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

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

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

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

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

我或多或少正在寻求有关如何在我的应用中构建服务以及它如何处理这些任务的建议。

【问题讨论】:

    标签: android alarmmanager


    【解决方案1】:

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

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

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

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

    如果您想确保可以不间断地进行定期工作,您没有选择使用当前或AlarmManager 实现。目标是仅在实际工作脉冲期间有一个活动的WakeLock,并在该工作脉冲完成时释放WakeLock 并关闭服务。你可以看到这个模式的实现in WakefulIntentService

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多