我正在创建一个PhoneGap应用程序,当应用程序处于活动状态时,它会跟踪用户的当前位置并将其显示在地图上。
当应用程序启动时,我开始使用setInterval
on跟踪位置navigator.geolocation.getCurrentPosition
。当我收到暂停事件时,该间隔被清除。当我收到恢复事件时,我setInterval
再次打电话。
此外,在接收到恢复事件时,我需要向服务器发送 Ajax 请求,以查看应用程序在后台时是否发生了任何有趣的事情,并且可能会显示一个带有信息的新屏幕。
有时,几乎从不在我的手机上,但在测试人员的手机上更常见的是,简历花费了太多时间并且应用程序被 iOS 杀死:
Code Type: ARM (Native)
Parent Process: launchd [1]
Date/Time: 2013-05-29 09:26:54.352 +0200
OS Version: iOS 6.1.4 (10B350)
Report Version: 104
Exception Type: 00000020
Exception Codes: 0x000000008badf00d
Highlighted Thread: 0
Application Specific Information:
com.x failed to resume in time
Elapsed total CPU time (seconds): 10.590 (user 10.590, system 0.000), 53% CPU
Elapsed application CPU time (seconds): 9.821, 49% CPU
以下伪代码显示了我如何连接应用程序:
(function app() {
function init() {
// Init app
// ...
startGPS();
checkState();
}
function checkState() {
// Make Ajax request to server and compare with local state
// and decide which screen to show
// ...
}
function startGPS() {
// use setInterval on navigator.geolocation.getCurrentPosition
// ...
}
function stopGPS() {
// clear the interval from startGPS()
// ...
}
// Other functions
// ...
on('pause', stopGPS);
on('resume', startGPS)
on('resume', checkState);
on('deviceready', init);
})();
我,也许天真地认为,由于 Ajax 调用和getCurrentPosition
调用都是异步的,我不会锁定渲染并且应用程序能够及时恢复,但似乎并非如此。我还尝试将我的简历代码包装在 a 中setTimeout
,但结果相同。
在不及时恢复的情况下实现这一目标的更好方法是什么?
我正在使用 PhoneGap 2.7