【问题标题】:Android background service and AlarmManagerAndroid后台服务和AlarmManager
【发布时间】:2012-02-01 01:52:16
【问题描述】:

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

我已经阅读了很多方法,我打算这样做:

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

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

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

我想我需要澄清一下。

感谢您的帮助,

【问题讨论】:

    标签: android service alarmmanager


    【解决方案1】:

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

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

    请允许用户选择投票周期,包括“从不投票——我会从活动中手动刷新信息”。另外,请尊重background data setting(自 ICS 起已弃用)。

    我想我需要澄清一下。

    如果即使活动不在前台也应该继续进行轮询,请使用AlarmManager。但是,大多数使用AlarmManager 的方法将由IntentService 处理真正的工作(在您的情况下,GPS 定位和网络 I/O)。这在您的情况下不起作用,因为 GPS 是异步的——您不能随时获得修复。修复需要很长时间,可能是永远,因此您必须处理延迟并最终使操作超时。写一个Service 来做到这一点是possible,但很棘手,特别是如果您打算在设备进入睡眠状态时收集这些信息。

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

    【讨论】:

    • 非常感谢,我将使用AlarmManager。由于应用程序的性质,位置提供者需要是 GPS,我正在考虑让用户选择轮询周期。但是,如果用户选择“从不投票”,那么应用就没有任何意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2012-02-12
    相关资源
    最近更新 更多