使用 Template10 在 UWP 应用程序中测试 suspend/resume

Testing suspend/resume in UWP apps with Template10

我正在开发 Windows 10 UWP 应用,我正在使用 Template10 library。在我的应用程序主页的视图模型中,我有这段代码来尝试处理挂起和恢复:

    public override void OnNavigatedTo(object parameter, NavigationMode mode, IDictionary<string, object> state)
    {
        if (state.Any())
        {
            NumberOfQuizQuestions = (int)state["QuizQuestions"];
            state.Clear();
        }
    }

    public override Task OnNavigatedFromAsync(IDictionary<string, object> state, bool suspending)
    {
        if (suspending)
        {
            state["QuizQuestions"] = this.NumberOfQuizQuestions;
        }
        return base.OnNavigatedFromAsync(state, suspending);
    }

我的问题是:如何测试它是否正常工作?当我在调试器中启动应用程序时,会显示生命周期工具栏,因此当我单击 "Suspend and shutdown" 时,OnNavigatedFromAsync() 中的代码运行并且 suspending 为真,这似乎是正确的。但无论我如何尝试启动应用程序,stateOnNavigatedTo() 中都是空的。这是预期的吗?

您可以将您的应用程序部署到 Windows 10 移动模拟器或实际设备。然后您可以 运行 应用程序,转到您的开始屏幕并在一段时间后 return 到它以触发不同的状态。这不会中断您的调试会话。

我快速可靠地 test/debug 在 Windows 10 PC 上恢复场景的方式如下:

  1. 在 Visual Studio 中,运行 您的应用程序未附加调试器 (ctrl-F5)
  2. 在应用程序中,导航到您要暂停应用程序的状态。
  3. 切换到 Visual Studio 并在调试器下启动应用程序(F5 - 调试,或 F10 - 单步执行或 F11 - 单步执行)。

当您在第 3 步开始调试会话时,Visual Studio 将首先编译和部署您的应用程序。当然,由于应用是运行ning,所以必须先挂起再终止。

然后再次启动应用程序,附加调试器,之前的执行状态是"terminated"。放置断点并调试。

谢谢大家。问题是 Template10 使用磁贴的 ID 来确定启动是来自主磁贴还是辅助磁贴 - 如果磁贴的名称是 "App",则它是主磁贴。在这种情况下,我使用的是 Windows Phone 8.0 的升级项目,出于某种原因,我的 Package.appxmanifest 有一个应用程序标签,其 ID 不是 "App"。