2012-04-15 112 views
0

我开发一个应用程序,通过GPS跟踪用户,并提醒他们是否跨越收费桥。使用WakefulIntentService管理异步GPS更新

我明显需要GPS位置侦听器在服务中运行,而且我还需要一个局部唤醒锁,以便在电话处于睡眠状态时偶尔运行。 我也希望GPS更新的频率有所不同,具体取决于距收费桥的距离以节省电池。 cwac- WakefulIntent服务似乎是我想要达到的目标。

但是,在我走下这条路线之前,我可以看到我遇到的一些问题(如果你赦免双关语;-)。

WakefulIntent服务是否会退出并释放唤醒锁doWakefulWork()即使我等待我的位置侦听器返回一些GPS更新也会完成唤醒。

如何防止doWakefulWork返回,直到我得到位置更新和清理我的侦听器。

如果在警报管理器再次启动服务时,即在doWakefulWork()完成之前,我还在等待GPS更新,会发生什么情况?

如何在服务的实例之间持久保存数据。我可以将一组GPS配合物放入SharedPrefs吗?

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

尽管演示应用程序提供了一个可用的模板,但我一直无法找到WakefulIntentService执行任何异步作业的任何可靠示例。

回答

0

cwac- WakefulIntent服务似乎是我想要达到的目标。

不是。 IntentService不适用于位置跟踪,因为您无法注册侦听器。该服务将在onHandleIntent()结束时关闭。

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

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

是的。

如何防止doWakefulWork返回,直到我得到位置更新和清理我的侦听器。

你不知道。你使用别的东西,比如LocationPoller,或者更好的是addProximityAlert()

如果我仍然在等待GPS更新时警报管理器再次启动服务时会发生什么,即doWakefulWork()完成之前?

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

如何在服务的实例之间持久保存数据。我可以将一组GPS配合物放入SharedPrefs吗?

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

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

你会改变你的报警时间表。

我一直没能找到WakefulIntentService做任何异步作业的可靠实例。

WakefulIntentService的 “异步工作”。它不执行其他异步作业。

+0

谢谢。指向doProximityAlert()的指针给了我一个去处。现在我只需要弄清楚如何使用wakelock编写服务或使用始终运行的服务模板。 – user1325094 2012-04-16 05:59:03