Javascript 长时间暂停(未终止)后恢复应用程序时如何处理场景

Javascript 长时间暂停(未终止)后恢复应用程序时如何处理场景,javascript,windows-8,winjs,Javascript,Windows 8,Winjs,我的应用程序显示它从web服务检索的数据。假设我的应用程序处于暂停模式,并且长时间处于暂停状态。之后,当这个应用程序恢复时,我想再次查询web服务,并在应用程序中显示更多最新数据。问题是我不确定什么地方是处理这种情况的好地方。我在下面提供了代码的简化版本。在下面的示例中,当我使用Suspend和Terminate选项时,我在控制台窗口中获得resume,但是当我只执行一个Suspend,并且在恢复之后,似乎没有调用任何函数。你知道我做错了什么吗 app.addEventListener("res

我的应用程序显示它从web服务检索的数据。假设我的应用程序处于暂停模式,并且长时间处于暂停状态。之后,当这个应用程序恢复时,我想再次查询web服务,并在应用程序中显示更多最新数据。问题是我不确定什么地方是处理这种情况的好地方。我在下面提供了代码的简化版本。在下面的示例中,当我使用Suspend和Terminate选项时,我在控制台窗口中获得resume,但是当我只执行一个Suspend,并且在恢复之后,似乎没有调用任何函数。你知道我做错了什么吗

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);