我有一个几乎不需要用户交互但需要地理围栏的应用程序。我可以完全在后台服务中运行它吗?
首次运行服务时会有一个 Activity。此 Activity 将启动一个服务并为 BOOT_COMPLETED 注册一个 BroadcastReceiver,因此该服务将在启动时启动。此活动不太可能再次运行。
该服务将设置警报以定期触发,这将导致 IntentService 从网络下载位置列表。然后,此 IntentService 将在这些位置周围设置地理围栏,并创建 PendingIntents,当接近这些位置时将触发。反过来,这些 PendingIntent 将导致另一个 IntentService 采取一些行动。
所有这些都需要在后台进行,除了安装后第一次启动 Activity 之外没有用户交互。因此,Activity 不会与 LocationClient 或任何位置服务交互。
实际上,我已经使用proximityAlerts 进行了设置,但是出于电池寿命的原因,我希望迁移到新的地理围栏API。但是,我听说在服务中使用 LocationClient 可能会出现一些问题。具体来说,我所听到的(抱歉,没有参考资料,只是传闻):
- 位置客户端依赖于 ui 可用性进行错误处理
- 当从后台线程调用时,LocationClient.connect() 假定它是从主 ui 线程(或具有事件循环器的其他线程)调用的,因此如果我们从后台线程中运行的服务调用此方法,则永远不会调用连接回调
当我进行调查时,我看不出为什么会出现这种情况,或者为什么它会阻止我做我想做的事。我希望它几乎可以替代proximityAlerts ...
任何人都可以在这里阐明一些事情吗?