我正在开发一个通过GPS跟踪用户的应用程序,并提醒他们是否越过收费桥。
我显然需要GPS位置监听器在服务中运行,我还需要部分唤醒锁,以便在手机睡眠时偶尔可以运行。 我还希望GPS更新频率的变化取决于收费桥的距离,以节省电池。 cwac- WakefulIntent服务似乎是我想要达到的目标的理想选择。
然而,在我走这条路之前,我可以看到一些问题(如果你原谅双关语; - )。
即使我正在等待我的locationlistener返回一些GPS更新,WakefulIntent服务是否会在doWakefulWork()完成后退出并释放唤醒锁。
在获得位置更新并清理我的监听器之前,如何阻止doWakefulWork返回。
当闹钟管理器再次启动服务时,即在doWakefulWork()完成之前,我还在等待GPS更新时会发生什么?
如何在服务的实例化之间保留数据。我可以将一系列GPS协议填充到SharedPrefs中吗?
最后,当我靠近收费桥时,我需要更多的GPS频繁更新。我是否在doWakefulWork()中或通过更改scheduleAlarms()来管理它,以便它使用setRepeating(),并在服务的SharedPrefs中存储分钟数。这里的想法是根据与感兴趣区域的距离来限制GPS使用。
虽然演示应用程序提供了一个可供使用的模板,但我还没有找到WakefulIntentService执行任何异步作业的任何可靠示例。
答案 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
"异步作业"。它不会执行其他异步作业。