我正在编写一个 android 应用程序,它每 5 分钟获取一次用户位置,将其存储在数据库中并将其发送到服务器。
我已经阅读了很多这样做的方法,我打算做以下事情:
- 用户启动应用
- 主 UI Activity 启动服务。
- 该服务在后台运行并不断打开和关闭 GPS,并创建新的 将保存到数据库的线程,并将数据发送到服务器。
但我已经看到它可以通过“远程服务”来完成(http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html ) 或使用 AlarmManager 安排每 5 分钟启动一次此服务。
该服务需要始终运行:重要的是在每个间隔(5 分钟)后执行一次。
我想我需要在这里澄清一下。
谢谢你的帮助,
最佳答案
I am coding an android application that gets the user position every 5 minutes, stores it in the database and sends it to a server.
请允许用户选择位置提供商。并非每个人的设备上都有 GPS。不是每个人都启用了 GPS。而且,并不是每个人都希望 GPS 每五分钟打开一次电源。
请允许用户选择轮询周期,包括“从不轮询——我会从 Activity 中手动刷新信息”。另外,请尊重 background data setting (自 ICS 起已弃用)。
I think I need some clarity here.
如果即使 Activity 不在前台也应该继续进行轮询,请使用 AlarmManager
。但是,大多数使用 AlarmManager
的方法都会让 IntentService
处理实际工作(在您的情况下,GPS 定位和网络 I/O)。这在您的情况下不起作用,因为 GPS 是异步的——您不能随心所欲地获得修复。这将需要很长时间,甚至可能永远才能修复,因此您必须处理延迟并最终使操作超时。编写一个 Service
来做到这一点是 possible ,但很棘手,特别是如果您打算在设备休眠时收集此信息。
但是,如果仅当 Activity 在前台且设备开启时轮询才应该继续,我根本不会为 Service
而烦恼。只需让 Activity 使用 postDelayed()
设置每五分钟计划运行一次代码,然后让它完成工作。
关于Android后台服务和AlarmManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5766912/