2011-04-23 125 views
2

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

我看过这样做的很多方面,我要做到以下几点:

  1. 用户启动应用程序
  2. 主UI活动开始的服务。
  3. 该服务在后台运行,并不断打开和关闭gps,并创建新的线程保存到数据库,并将数据发送到服务器。

但我看到它可以通过“远程服务”来完成(http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ RemoteService.html)或者每5分钟安排一次启动此服务的AlarmManager。

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

我想我需要一些清晰的。

感谢你的帮助,

回答

5

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

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

请允许用户选择投票时间段,包括“从不投票 - 我将通过该活动手动刷新信息”。另外,请尊重background data setting(已弃用ICS)。

我想我需要一些清晰的地方。

如果即使活动不在前台,仍应继续轮询,请使用AlarmManager。然而,大多数使用AlarmManager的食谱都会有一个IntentService的实际工作(在你的情况下,GPS修复和网络I/O)。这在你的情况下不起作用,因为GPS是异步的 - 你不能只在你喜欢的时候得到修复。需要很长时间才能获得解决方案,因此您必须处理延迟并最终使操作超时。写一个Service这样做是possible,但棘手,特别是如果你的目标是收集这些信息,即使设备睡着了。

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

+0

非常感谢,我将使用AlarmManager。 由于应用程序的性质,位置提供商需要成为GPS,并且我正在考虑给用户选择投票期的选项。但是,如果用户选择“从不投票”,那么该应用程序没有任何意义。 – Ullfoll 2011-04-23 21:31:40