Android:是否可以使用AlarmManager执行所有更新任务

时间:2013-11-18 08:03:35

标签: android alarmmanager android-pendingintent

我已经使用后台服务来更新任务,例如在我的Android应用程序中频繁播放网络服务器(发送地理位置数据或发送/获取网络数据),我也有为此遇到了许多问题(进程缓慢,应用程序挂起)。

但是在我目前的应用程序中,我使用了AlarmManager,然后是PendingIntents来完成一些运行良好的任务。 所以我认为如果我用AlarmManager后跟PendingIntents替换每个使用服务的更新任务都是好的。

这是正确的方式还是我要犯一个大错?

所有建议都很明显。 提前致谢。

2 个答案:

答案 0 :(得分:1)

使用AlarmManager安排的服务和警报有时会提供不同但互补的用途。使用set方法之一计划警报时,将在指定时间触发警报,您​​应在BroadcastReceiver处理警报。这意味着您的处理必须是响应式的,不能进行异步操作。 According to the docs

  

BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效。一旦你的代码从此返回   功能,系统认为要完成的对象不再   活性。 (...)任何需要异步操作的东西都不是   可用,因为您需要从函数返回来处理   异步操作,但此时BroadcastReceiver是   不再活跃,因此系统可以自由地杀死它的进程   在异步操作完成之前。

如果您想处理更复杂的操作,建议您启动服务。即使您在接收器上使用最近可用的goAsync()电话,仍然需要be responsive

  

这不会改变对广播相对敏感的期望(在10秒内完成)

所以它最终取决于你想要达到的目标,何时使用它们或将它们结合使用。

答案 1 :(得分:0)

我不是说使用Alaram Manager是一个很大的错误。

现在要运行后台服务,只有很少的选项,简单且部分可靠的是AlarmManager。

虽然有时Alarm Manager is not 100% reliable查看其他类别来执行这些操作(例如Asynchronous Threaddelay looping技术),但后台服务的复杂程度要高得多。

当我们比较后台服务所需技术的优缺点时,AlarmManager赢得了比赛。

我更喜欢 AlarmManager在考虑现在打开的选项以完成后台任务时,对于这类后台服务是个不错的选择。

希望Google能够提供更好的解决方案来处理后台服务。