下图演示了 Windows Phone 应用程序的生命周期。在该图中,圆圈表示应用程序的状态。矩形显示应用程序应管理其状态的应用程序级别或页面级别的事件。

Launching 事件

Launching 事件在用户从已安装程序列表或从“开始”中的磁贴或通过其他方式(如点按与应用程序相关的 Toast 通知或从“Photos Extras”菜单中选择应用程序)启动新的应用程序实例时引发。当以此方式启动应用程序时,它应向用户显示新实例,而不是先前实例的延续。为了帮助确保应用程序快速加载,应在该事件的处理程序中执行尽可能少的代码。特别是,避免文件和网络操作等资源密集型任务。您应在应用程序加载之后,在后台线程中执行这些任务以便实现最佳的用户体验。

运行

启动之后,应用程序处于运行状态。在用户向前导航、离开应用程序或向后导航到第一个应用程序页面之前,应用程序程序将持续运行。Windows Phone 应用程序不应为用户提供退出应用程序的机制。当手机的锁定屏幕功能启动时,应用程序将保持运行状态,除非您已禁用应用程序空闲检测。

OnNavigatedFrom 方法

当用户导航离开应用程序页面时,将会调用 OnNavigatedFrom(NavigationEventArgs) 方法。这可能是由应用程序中的普通页面导航导致。当取消激活应用程序时也会调用该方法,下一节将对此进行讨论。每当调用该方法时,应用程序都应存储页面的状态,以便在用户返回到页面时可以还原应用程序。向后导航除外。可以使用 NavigationMode 属性来确定导航是否为向后导航,若为向后导航,则无需保存状态,因为页面将在下次访问时重新创建。

在某些情况下,您可能希望将状态同时保存在 OnNavigatingFrom(NavigatingCancelEventArgs) 方法中。尤其是在存储 MediaElement 控件的状态时,您将需要执行此操作。

Deactivated 事件

当用户向前导航、导航出您的应用程序、按“开始”按钮或启动其他应用程序时,都将会引发 Deactivated 事件。如果您的应用程序启动选择器,也会引发 Deactivated 事件。

当设备的锁定屏幕功能启动时,也会引发该事件,除非已禁用应用程序空闲检测。

在 Deactivated 事件的处理程序中,您的应用程序应保存任何应用程序状态,以便将来还原。Windows Phone 应用程序随 State 对象一起提供,后者是可以用来存储应用程序状态的字典。如果应用程序在被逻辑删除后重新激活,则将使用您保存在 Deactivated 中的数据填充该状态字典。由于内存中存在该数据,您可以用它来还原状态,而无需资源密集型的文件操作。

在调用 Deactivated 后,应用程序可能会被完全终止。当应用程序终止时,其状态将不保留。因此,还应在 Deactivated 事件期间,将应用程序实例间应保留的所有未保存状态存储到独立存储中。

休眠

当用户向前导航或导航出应用程序时,引发 Deactivated 事件后,操作系统将尝试使应用程序置于休眠状态。在此状态下,应用程序的所有线程均将停止,并且不进行任何处理操作,但应用程序仍完好地保留在内存中。如果从该状态中重新激活应用程序,应用程序无需重新创建任何状态,因为状态已保留。

如果在应用程序进入休眠状态后启动新的应用程序,这些应用程序需要更多的内存才能提供出色的用户体验,操作系统将开始逻辑删除休眠的应用程序以释放内存。

已逻辑删除

逻辑删除的应用程序已终止,但该应用程序的导航状态相关信息和 Deactivated 期间由应用程序填充的状态字典将保留下来。设备每次最多可维护五个应用程序的逻辑删除信息。如果在逻辑删除应用程序之后,用户向后导航至应用程序,则应用程序将会重新启动并使用保留的数据还原状态。否则,将只是终止应用程序。

Activated 事件

当用户返回到休眠或逻辑删除的应用程序时,将调用 Activated 事件。应用程序应检查事件参数的 IsApplicationInstancePreserved 属性,以确定应用程序是从休眠状态返回,还是从逻辑删除状态返回。如果 IsApplicationInstancePreserved 为 true,则应用程序之前处于休眠状态,状态已由操作系统自动保留。若为 false,则应用程序之前已被逻辑删除,应用程序应使用状态字典来还原应用程序状态。在执行 Activated 事件处理程序期间,应用程序不应执行资源密集型任务(例如,从独立存储或网络资源加载内容),因为这会增加应用程序恢复所用的时间。而是应在加载应用程序之后,在后台线程中执行这些操作。

OnNavigatedTo 方法

当用户导航到页面时,即会调用 OnNavigatedTo(NavigationEventArgs) 方法。这包括当应用程序第一次启动时、用户在应用程序的页面之间进行导航时以及在应用程序休眠或被逻辑删除后重新启动时。在此方法中,应用程序应检查是否页面为新实例。若不是新实例,则无需还原。若页面为新实例,并且在页面的状态字典中存在数据,则应使用该数据来还原页面 UI 的状态。

Closing 事件

当用户向后导航到应用程序的第一页时,即会引发 Closing 事件。在这种情况下,应用程序将终止,并且不会保存状态。在 Closing 事件处理程序中,您的应用程序可以保存应跨实例保留的数据。应用程序完成所有应用程序和页面导航事件的时间被限定为 10 秒。若超出此限度,则应用程序将终止。因此,最好保存整个应用程序生存期的持续状态,避免在 Closing 事件处理程序中执行大量的文件 I/O 操作。

执行模型事件和应用程序操作摘要


下表是应用程序生命周期内所发生事件和应用程序应针对每个事件执行的操作的简短摘要。

事件或方法

应用程序操作

Launching 事件

执行非常少量的代码。不要执行资源密集型操作,例如,访问独立存储。

OnNavigatedFrom   方法

如果不是向后导航,则将 UI 状态保存到 State 字典。

Deactivated   事件

当应用程序被逻辑删除时,将应用程序状态保存到 State。同时,在应用程序终止时,将持续状态保存到独立存储。当应用程序进入休眠状态时,不要销毁内存中应用程序的状态。

Activated 事件

检查 IsApplicationInstancePreserved。若为 true,则不执行任何操作。若为 false,则使用 State 中的数据还原应用程序状态。

OnNavigatedTo   方法

检查页面是否为新实例。若不是,则状态自动保持。否则,如果 State 中存在数据,则使用该数据还原 UI。

Closing 事件

将持续应用程序数据保存到独立存储。

Tombstone

执行模式:Tombstoning、PageState、ApplicationState、PersistentData、TransientState。Tombstoning、TransientState下模拟多任务,在Tombstone模式下,应用被操作系统终止,就需要保存TransientState,以便于应用程序复活后恢复应用原状态。

应用程序Lifecycle包括Launching、Running、Closing、Deactivating、Activating这五种运行状态,在App.xaml.cs中影响这些事件。

Deactivating、Activating就是Tombstone下的运行态。

通过PhoneApplicationService来保存状态信息。

可以在Page中override OnNavigatedFrom、OnNavigatedTo方法来保存、恢复状态。
实现保存文本框中用户正在输入的值的代码:
protected override OnNavigatedFrom(e)
{
PhoneApplicationService.Current.State["Test"] = textbox1.Text;
base.OnNavigatedFrom(e);
}

protected override OnNavigatedTo(e)
{
if(PhoneApplicationService.Current.State.ContainsKey("Test"))
{
textbox1.Text = PhoneApplicationService.Current.State["Test"] as string;
}
base.OnNavigatedTo(e);
}

转载于:https://www.cnblogs.com/6666/archive/2012/07/20/2600798.html

Windows Phone 应用程序生命周期相关推荐

  1. IIS 7.0 的 ASP.NET 应用程序生命周期概述

    本主题介绍在 IIS 7.0 集成模式下运行以及与 .NET Framework 3.0 或更高版本一起运行的 ASP.NET 应用程序的应用程序生命周期.IIS 7.0 还支持经典模式,其行为类似于 ...

  2. 【转】Asp.net的生命周期之应用程序生命周期

    参考:http://msdn.microsoft.com/zh-cn/library/ms178473(v=vs.100).aspx 参考:http://www.cnblogs.com/JimmyZh ...

  3. 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: iOS开发进阶2012-10-08 15:35 42691人阅读 评论(30) 收藏 举报 iosapplication任务anima ...

  4. Asp.net的生命周期之应用程序生命周期

    参考:http://msdn.microsoft.com/zh-cn/library/ms178473(v=vs.100).aspx 参考:http://www.cnblogs.com/JimmyZh ...

  5. Kubernetes CKA认证运维工程师笔记-Kubernetes应用程序生命周期管理

    Kubernetes CKA认证运维工程师笔记-Kubernetes应用程序生命周期管理 1. 在Kubernetes中部署应用流程 2. 使用Deployment部署Java应用 2.1 Pod与D ...

  6. ASP.NET 应用程序生命周期概述

    本主题概述应用程序生命周期,列出重要的生命周期事件,并描述如何编写适合应用程序生命周期的代码.在 ASP.NET 中,若要对 ASP.NET 应用程序进行初始化并使它处理请求,必须执行一些处理步骤.此 ...

  7. IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期

    本文内容 应用程序生命周期概述 生命周期事件和 Global.asax 文件 编译生命周期 HTTP 模块 本文概述 VS 2008 ASP.NET 应用程序的生命周期,列出了重要的生命周期事件,并描 ...

  8. IIS 7.0的ASP.NET应用程序生命周期概述

    小结于:http://msdn.microsoft.com/zh-cn/library/bb470252(v=vs.100).aspx IIS 7.0的ASP.NET应用程序生命周期概述 (一)结构概 ...

  9. ASP.NET页面生命周期与应用程序生命周期

    页面生命周期 页面生命周期执行一系列步骤:页面的初始化.实例化控件.还原和维护状态.运行事件处理程序代码.呈现.为了在合适的阶段执行所需的代码,所以要对页面生命周期非常熟悉.在页生命周期的各个阶段,页 ...

最新文章

  1. 更换VS.NET 2010的皮肤 [Visual Studio Blog]
  2. Android之Handler探索
  3. 谈点技术吧,6万人在线每秒实时更新的解决方案
  4. 从0到1搞一波dubbo
  5. javascript 打开新窗口
  6. 论文小综 | Pre-training on Graphs
  7. 为什么android手机内存不够,安卓手机老是内存不足怎么解决
  8. lua中variables和table
  9. geotoolkit 测井曲线显示时间、深度双刻度
  10. Ubuntu打印到pdf文件
  11. EBS系统常见问题与故障
  12. 招银网络科技校园招聘面试2020.10
  13. kaggle:Quora Insincere Questions Classification
  14. 收藏夹吃灰了:GitHub 上值得收藏的100个精选前端项目!
  15. 计算机的英语怎么拼读,拼音拼读怎么教
  16. antd源码-spin解析
  17. 程序员裸辞全职接单一个月的感触
  18. Mega使用及R语言中多序列比对
  19. bzoj 1171: 大sz的游戏, bzoj 2892: 强袭作战
  20. JDK的解压安装 - CentOS(结尾附视频)

热门文章

  1. 《偷梁换柱》全世界最最简单对付SMSS。EXE病毒的方法,可能也是对付某类流氓程序的好方法...
  2. html工具提示错误,HTML-KickStart工具提示错误
  3. Pycharm如何设置自定义背景颜色
  4. Vivado Hardware Manager的使用
  5. ntp服务器响应每秒请求数量,批量、增量接口并发问题和NTP协议
  6. 使用pytorch最关键的几个点
  7. python装饰器改变命运
  8. Jmeter JDBC执行多条SQL
  9. ORB-SLAM2地图存储加载系统
  10. 阅读《Android 从入门到精通》(29)——四大布局