Android后台服务和AlarmManager

标签 android service alarmmanager

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

我已经阅读了很多这样做的方法,我打算做以下事情:

  1. 用户启动应用
  2. 主 UI Activity 启动服务。
  3. 该服务在后台运行并不断打开和关闭 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/

相关文章:

android - 即使在使用高效加载大位图指南后如何避免 OutOfMemoryError

service - 运行 Windows 服务时登录失败

java - 从服务返回同步消息,然后进行异步处理 - 担心挂起线程吗?

android - 特定日期和时间的 AlarmManager

新的一天或重大时间变化的 Android Intent

android - 如何设置闹钟每月重复

java - GPS 启用检查后销毁并重新启动应用程序

android)我可以设置一个在安装后立即运行的默认 Activity 吗

java - 程序显示空指针异常....将 double 转换为 int

android - Android服务的生命周期