Android后台服务和AlarmManager

时间:2011-04-23 20:59:58

标签: android service alarmmanager

我正在编写一个Android应用程序,每5分钟获取一次用户位置,将其存储在数据库中并将其发送到服务器。

我已经阅读了许多方法,我打算做以下事情:

  1. 用户启动应用程序
  2. 主UI活动启动服务。
  3. 该服务在后台运行,并继续打开和关闭gps,并创建新的 将保存到数据库的线程,并将数据发送到服务器。
  4. 但我已经看到它可以通过“远程服务”完成(http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html )或使用AlarmManager安排每5分钟启动一次此服务。

    该服务需要始终运行:重要的是,在每个间隔(5分钟)之后,它将被执行。

    我想我在这里需要一些清晰度。

    感谢您的帮助,

1 个答案:

答案 0 :(得分:5)

  

我正在编写一个Android应用程序,每5分钟获取一次用户位置,将其存储在数据库中并将其发送到服务器。

请允许用户选择位置提供商。不是每个人都在他们的设备上有GPS。并非所有人都启用了GPS。而且,并非所有人都希望每隔五分钟就能打开GPS的电源。

请允许用户选择轮询周期,包括“从不轮询 - 我将从活动中手动刷新信息”。另外,请尊重background data setting(ICS已弃用)。

  

我想我在这里需要一些清晰度。

如果即使活动不在前台也应继续进行轮询,请使用AlarmManager。但是,大多数使用AlarmManager的方法都会由IntentService处理实际工作(在您的情况下,GPS修复和网络I / O)。这不适用于您的情况,因为GPS是异步的 - 您不能随时获得修复。获得修复需要很长时间,可能永远,所以你必须处理延迟并最终超时操作。写Service来执行此操作是possible,但是很棘手,特别是如果您的目标是收集此信息,即使设备处于睡眠状态。

但是,如果轮询仅在活动位于前台并且设备处于打开状态时才会继续进行,那么我根本不会打扰Service。只需让活动使用postDelayed()来设置每运行五分钟的代码,然后让它完成工作。