我的场景是我想让服务定期获取一些信息(例如用户的位置),将其报告给我的服务器并在该位置与某个 X 位置匹配时接收推送通知。
无论应用程序是否正在运行,我都会就什么是定期检索位置信息的最佳机制获得一些建议。以下是我考虑过的选项以及每个选项的一些背景信息。
创建标准 Android 服务
我的第一个想法是创建一个 STICKY 服务,该服务初始化一个 GoogleAPIClient,它将获取位置更新,一旦收到位置,它就会将其发送到服务器。这种方法的问题是我必须定期获取位置信息。因此,即使它没有运行位置扫描,该服务也会持续运行。另外,在服务中每隔一段时间轮询位置的最佳方式是什么?
使用 IntentService 创建警报
我想到的第二个选项是让警报管理器唤醒并启动一个启动位置更新的 IntentService(通过 GoogleAPIClient)。获得位置后,发送到服务器并关闭位置更新。这将解决定期启动/停止位置更新的问题。但是,在没有等待的情况下,我在 IntentService 中连接到 GoogleAPIClient 的运气并不好,我认为这不是最有效的做法。
创建 GcmTaskService
这具有 AlarmManager 的许多优点,并且在打盹模式方面似乎更有效,因为它只在手机处于维护模式时唤醒服务,所以它似乎是一个很好的解决方案。但是,我与连接到 GoogleAPIClient 以获取位置而无需等待的 IntentService 有相同的问题。
我可能在这个兔子洞里走得太远了,可能有一些明显的东西我遗漏了,所以任何建议都将不胜感激。