使用Wakeful IntentService管理异步GPS更新

时间:2012-04-15 20:35:15

标签: android service asynchronous gps android-pendingintent

我正在开发一个通过GPS跟踪用户的应用程序,并提醒他们是否越过收费桥。

我显然需要GPS位置监听器在服务中运行,我还需要部分唤醒锁,以便在手机睡眠时偶尔可以运行。 我还希望GPS更新频率的变化取决于收费桥的距离,以节省电池。 cwac- WakefulIntent服务似乎是我想要达到的目标的理想选择。

然而,在我走这条路之前,我可以看到一些问题(如果你原谅双关语; - )。

即使我正在等待我的locationlistener返回一些GPS更新,WakefulIntent服务是否会在doWakefulWork()完成后退出并释放唤醒锁。

在获得位置更新并清理我的监听器之前,如何阻止doWakefulWork返回。

当闹钟管理器再次启动服务时,即在doWakefulWork()完成之前,我还在等待GPS更新时会发生什么?

如何在服务的实例化之间保留数据。我可以将一系列GPS协议填充到SharedPrefs中吗?

最后,当我靠近收费桥时,我需要更多的GPS频繁更新。我是否在doWakefulWork()中或通过更改scheduleAlarms()来管理它,以便它使用setRepeating(),并在服务的SharedPrefs中存储分钟数。这里的想法是根据与感兴趣区域的距离来限制GPS使用。

虽然演示应用程序提供了一个可供使用的模板,但我还没有找到WakefulIntentService执行任何异步作业的任何可靠示例。

1 个答案:

答案 0 :(得分:0)

  

cwac- WakefulIntent服务似乎是我想要实现的目标的理想选择。

不是真的。 IntentService不适合进行位置跟踪,因为您无法注册侦听器。 onHandleIntent()结束后服务将关闭。

就个人而言,我会在addProxmityAlert()上使用LocationManager,而不是自己搞这些。

  

即使我正在等待我的locationlistener返回一些GPS更新,WakefulIntent服务是否会在doWakefulWork()完成后退出并释放唤醒锁。

  

在获得位置更新并清理我的监听器之前,如何阻止doWakefulWork返回。

你不是。您使用其他内容,例如LocationPoller,或者更好的是addProximityAlert()

  

当闹钟管理器再次启动服务时,即在doWakefulWork()完成之前,我还在等待GPS更新会怎样?

您确保具有适当的超时逻辑以防止这种情况发生,例如可以在LocationPoller中找到。

  

如何在服务的实例化之间保留数据。我可以将一系列GPS协议填充到SharedPrefs中吗?

是,或数据库或您选择的格式的文件。

  

最后,当我靠近收费桥时,我需要更多的GPS频繁更新。我是否在doWakefulWork()中或通过更改scheduleAlarms()来管理它,以便它使用setRepeating(),并在服务的SharedPrefs中存储分钟数。

您可以更改闹钟时间表。

  

我还没有找到WakefulIntentService执行任何异步作业的任何可靠示例。

WakefulIntentService "异步作业"。它不会执行其他异步作业。