Windows 8 动手实验系列教程 实验5:进程生命周期管理

动手实验

实验5:进程生命周期管理

 

 

2012年9月缓存

简介

进程生命周期管理对构建Windows应用商店应用的开发者来讲是须要理解的最重要的概念之一。不一样于传统的Windows应用(它们即便在后台仍然继续执行),Windows应用商店应用仅在前台时执行。一般不可见的应用程序被操做系统挂起而且不能被执行直到操做系统将它恢复到前台。session

当应用程序被挂起,它仍然在内存中,同时它的全部线程被挂起。只要进程仍然在内存中,当应用程序回到前台时,它将从中止的地方继续执行。要作到这一点开发者不须要作任何工做。然而您不能被保证进程一直在内存中。若是当应用程序被挂起时,Windows内核决定须要挂起应用程序所使用的内存,Windows能够终止挂起的应用程序。当应用程序被终止时,全部未保存的状态将被丢失。除非您采起步骤以保持状态,不然当用户返回应用程序并发现全部已完成的工做被丢失时将会很是吃惊。并发

显然咱们不会容许它发生。当应用程序被挂起时,即便Windows也不知道应用程序是否最终将被终止。您应当假定应用程序将被终止,所以您必须编写代码以在它被挂起时保存应用程序的状态。而后若是您检测到应用程序被挂起时有一个终止发生,您能够在从新激活时恢复状态。app

听起来很麻烦?有时是,可是对大多数应用程序来讲不是,而且这是您编写优秀应用程序必须作的工做。不作上述工做的潜在代价是仅仅切换到另外一个应用程序就会丢失他或她在您应用程序中所作的全部工做。async

目标

本实验将向您介绍进程生命周期管理并向您展现Visual Studio在缺省模版中为您编写的一些代码。由于Contoso食谱是一个简单的应用程序,因此咱们不须要编写新的代码来处理进程生命周期管理,Visual Studio注入的代码已经足够。您可能必须为本身的应用程序编写更多的代码,所以咱们将告诉您代码的位置以及您可使用哪些应用程序接口(API)。中止打字并坐下来休息一下,可是请务必集中注意力。函数

 

 

系统要求

您须要下列软件完成本实验:工具

  • Microsoft Windows 8
  • Microsoft Visual Studio 2012

 

设置

您必须执行如下步骤来准备本实验的计算机:测试

  1. 安装Microsoft Windows 8。
  2. 安装Microsoft Visual Studio 2012。

 

练习

本动手实验包含如下练习:spa

  1. 导航状态已经被保存
  2. 提示

 

练习1:导航状态已经被保存

由于在Contoso Cookbook中惟一须要保存的状态是导航状态(即用户查看的项或组以及导航历史),您不须要为处理进程生命周期管理作任何工做。Visual Studio在您的应用程序中包含一个名称为SuspensionManager的类,它位于项目Common文件夹的SuspensionManager.cs中。Visual Studio同时在App.xaml.cs中的App构造函数中包含一行代码,它为Suspending事件注册了一个事件处理程序。如此处所示,处理程序OnSuspending调用SuspensionManager.SaveAsync以保存应用程序的导航状态。操作系统

private async void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    await SuspensionManager.SaveAsync();
    deferral.Complete();
}

 

Visual Studio在App.xaml.cs文件的OnLaunched事件中包含一个if子句,它的做用是若是应用程序在被挂起后被操做系统终止,则恢复应用程序的导航状态。

if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
    // Restore the saved session state only when appropriate
    await SuspensionManager.RestoreAsync();
}

 

全部这些工做的结果是您能够免费得到不少东西。若是Contoso Cookbook被挂起并终止,当再次被启动时,它将自动转至您最后查看的页面。您能够经过按F5从Visual Studio运行应用程序,选择某个食谱并今后处所示的Debug Location调试位置)工具栏选择Suspend and shutdown挂起并关闭)以对其进行测试。

在以这种方式关闭应用程序后按F5以从新启动应用程序。以上操做对由操做系统终止并从新启动应用程序的过程进行了模拟。得益于Visual Studio建立的代码,应用程序将返回您关闭应用程序时查看的食谱。由于导航历史也被恢复,您甚至可使用返回按钮回溯您在应用中的步骤。

 

练习2:提示

咱们强烈建议您熟悉Visual Studio中的Suspend(挂起), Resume(继续), 和Suspend and shutdown(挂起并关闭)命令。这是调试应用程序进程生命周期管理状态的很好的方法。若是您仅仅经过启动应用程序并切换任务以使应用程序进入或退出前台的方法调试进程生命周期管理,大多数时候都能获得预想的结果。可是对于终止您将不能看到正确的行为。您将看到应用程序停留在内存的时间比预想的要长,由于Visual Studio调试器进行了一些处理以保持与应用程序的链接。对终止事件请使用Visual Studio中的Suspend and shutdown 命令。

决定进程生命周期管理须要保存的内容一样十分重要。在下一个实验中咱们将讨论设置(或称为用户首选项)而且您将注意到当用户输入或修改设置时咱们将马上保存它们。为进程生命周期管理保存的状态应该是一个帮助您恢复用户至应用程序挂起前位置的“瞬时”状态。其余任何须要保存的内容(例如设置或缓存)应该根据须要越早保存越好。这种作法将减小在进程生命周期管理的挂起事件中您须要完成的工做量。

总结

对于优秀的Windows应用商店应用,为进程生命周期管理处理SuspendResume事件是必须的。在Contoso Cookbook实验中咱们不须要为此作不少工做,由于咱们须要保存的全部内容就是导航历史。在您的应用程序中,可能须要作一些额外的工做。本实验向您介绍了Visual Studio生成的代码以及进程生命周期的基础设施。对于Contoso Cookbook还有不少工做须要完成。下一个实验将向您展现如何使用设置超级按钮保存用户首选项。让咱们继续前行。

相关文章
相关标签/搜索