Javascript 长时间暂停(未终止)后恢复应用程序时如何处理场景
我的应用程序显示它从web服务检索的数据。假设我的应用程序处于暂停模式,并且长时间处于暂停状态。之后,当这个应用程序恢复时,我想再次查询web服务,并在应用程序中显示更多最新数据。问题是我不确定什么地方是处理这种情况的好地方。我在下面提供了代码的简化版本。在下面的示例中,当我使用Suspend和Terminate选项时,我在控制台窗口中获得resume,但是当我只执行一个Suspend,并且在恢复之后,似乎没有调用任何函数。你知道我做错了什么吗Javascript 长时间暂停(未终止)后恢复应用程序时如何处理场景,javascript,windows-8,winjs,Javascript,Windows 8,Winjs,我的应用程序显示它从web服务检索的数据。假设我的应用程序处于暂停模式,并且长时间处于暂停状态。之后,当这个应用程序恢复时,我想再次查询web服务,并在应用程序中显示更多最新数据。问题是我不确定什么地方是处理这种情况的好地方。我在下面提供了代码的简化版本。在下面的示例中,当我使用Suspend和Terminate选项时,我在控制台窗口中获得resume,但是当我只执行一个Suspend,并且在恢复之后,似乎没有调用任何函数。你知道我做错了什么吗 app.addEventListener("res
app.addEventListener("resuming", function (vt) {
console.log("resuming");
});
app.addEventListener("activated", function (args) {
console.log("activated");
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
console.log("new launch");
} else {
console.log("resume");
}
}
});
app.oncheckpoint = function (args) {
console.log("suspended");
};
请参阅msdn页面。不幸的是,app.addEventListner('resuming',function(){})
没有抛出
msdn页面中的应用程序恢复部分可能也很有用,它讨论了延迟恢复的相同情况。假设变量“app”的定义是示例应用程序中的标准:
var app = WinJS.Application;
然后,您不能将该变量用于“恢复”或“挂起”事件,每个事件的内容如下:
注意:无法使用此功能添加某些Windows应用商店应用程序事件(如“挂起”和“恢复”)的侦听器。您必须改用Windows.UI.WebUI.WebUIApplication.addEventListener
因此,正如该文件所述,您需要使用:
Windows.UI.WebUI.WebUIApplication.addEventListener("suspending", suspending, false);
Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", resuming, false);
暂停后,您要在模拟器中等待多长时间才能恢复?暂停不会立即发生。相当长,超过30秒。一旦调用了checkpoint,suspend就开始工作了。问题是关于暂停后的简历。@Paul:我在一个c#应用程序中也观察到了同样的情况。我解决这个问题的方法是检查主控件的可见性。当它在挂起后可见时,我假设它是一份简历。对于您的用例,您可以定期检查Web服务,而不是检查特定事件。请记住,在
函数恢复(args)
中,您需要验证事件的类型。因为“resuming”
事件似乎是在调用app.onactivated()
之前启动应用程序时触发的。所以函数恢复(args){if(args.type==“resuming”){console.log(“我们正在真正恢复”);}其他{console.log(“我们收到了类型为:“+args.type”)的非恢复事件;}
Windows.UI.WebUI.WebUIApplication.addEventListener("suspending", suspending, false);
Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", resuming, false);