在后台定期轮询Android应用的最佳方式

时间:2011-05-19 00:07:33

标签: android

以Gmail应用为例。无论手机是否开启,它都会每10分钟左右轮询一次,以下载自您上次检查后可能已到达的新电子邮件。

我知道如何创建新服务并绑定到它。但我可以看到几种方法来实现这一目标:

  • 绑定一次,让服务以无限循环运行,在每个循环之间休眠10分钟
  • 完成后绑定和取消绑定,在10分钟内以某种方式安排下一个绑定
  • 使用AlarmManager类安排未来的民意调查

有什么折衷方案? Gmail应用如何实现它?

谢谢!

2 个答案:

答案 0 :(得分:18)

Gmail应用使用推送,而不是轮询。我建议使用这种技术,轮询是移动设备中的电池杀手。

要实施推送,请查看C2DM

如果您仍想轮询,推荐的方法是在AlarmManager中设置定期闹钟。

更新:Google已弃用C2DM并将其替换为Google Cloud Messaging (GCM)

更新:Google已弃用GCM并将其替换为 Firebase Cloud Messaging (FCM)

答案 1 :(得分:5)

  • 对于一个连续的,但不是密集的民意调查,如你评论的民意调查(在民意调查之间的分钟范围内),我会用AlarmManager实现它。通过这种方式,您可以确保手机在不需要唤醒锁的情况下唤醒,这会破坏您的电池。正如CommonsWare指出的那样,你仍然需要在你的代码执行时实现一个唤醒锁,但你可以在代码完成后立即释放它,避免在等待时保持手机开启。有关如何实施它的示例,请参阅他的评论。

  • 如果您需要在较短的时间内(每次轮询之间的秒数)需要更快的民意调查,我会使用服务,因为设置闹钟对于如此短的时间段没有意义,并且电池无论如何都会流失