Windows Phone 执行模型概述

  Windows Phone 执行模型控制在 Windows Phone 上运行的应用程序的生命周期,该过程从启动应用程序开始,直至应用程序终止。

  该执行模型旨在始终为最终用户提供快速响应的体验。为此,在任何给定时间内,Windows Phone 仅允许一个应用程序在前台运行。当应用程序不再运行于前台时,操作系统将使应用程序进入休眠状态。如果可用于前台应用程序的设备内存不足,无法提供出色的用户体验,则操作系统将开始终止休眠的应用程序(首先终止最早使用的应用程序)。应用程序可以使用为其提供的编程框架在取消激活和重新激活时管理其状态。这有助于创建一种在用户看来应用程序保持单一实例的用户体验,即使应用程序已终止或已重新激活。

  该执行模型还为用户提供了应用程序间一致的导航体验。在 Windows Phone 中,用户可通过从已安装程序列表或从“开始”中的磁贴启动应用程序来向前导航,除此之外,还可以通过其他方式向前导航,如点按与应用程序相关的 Toast 通知。用户还可以使用硬件“返回”按钮向后导航各个运行应用程序的页面,或者向后导航先前运行的应用程序的堆栈。Windows Phone 7.5 添加了通过按住硬件“返回”按钮来切换到先前运行的应用程序的功能。

 

  Windows Phone 应用程序生命周期

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

    

 

         

  Launching 事件

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

  运行

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

  OnNavigatedFrom 方法

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

  Deactivated 事件

  当用户向前导航、导航出您的应用程序、按“开始”按钮或启动其他应用程序时,都将会引发 Deactivated 事件。如果您的应用程序启动选择器,也会引发 Deactivated 事件。有关选择器的更多信息,请参阅 Windows Phone 启动器和选择器概述。当设备的锁定屏幕功能启动时,也会引发该事件,除非已禁用应用程序空闲检测。

  在 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 事件

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

警告说明警告:

通过本节所述的事件,您可以在应用程序进入和离开前台时保存和还原状态。但是,推荐的做法是在状态数据发生更改时立即保存状态数据。例如,当收到来自网络的某个 Web 请求时,可以立即将其结果保存到磁盘和/或应用程序状态字典中。您不应等到 Deactivated 事件发生后才存储此数据。请记住,所有应用程序生命周期事件都强制限定应用程序在 10 秒钟的时间内完成所有任务。

转载于:https://www.cnblogs.com/Dotaer/p/3580558.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon/c++接口基础 之 构造函数与Halcon算子

Halcon/C提供了构造函数,主要基于适合的Halcon算子。比如说HImage和HBarCode基于read_image and create_bar_code_model。 请注意当前的Halcon版本针对不同的算子构造函数的功能不同。如下我们介绍了一些最常用的Halcon算子,而一个完整的构造函数列表可…

bat自动输入用户名和密码_「小白到大牛之路6」交换机后台管理之重复输入用户名和密码...

项目需求解决项目5中存在的问题:用户名和密码只能输入一次。如果输入错误,就没有机会重新输入。项目实现#include int main(void) {// 定义变量,用来表示用户名和密码char name[32];char password[16];//输入用户名和密码while (1) {// 输入用…

halcon/c++接口基础 之 析构函数和Halcon算子

所有的HALCON/C类都提供了默认的析构函数用来自动销毁对应的内存。对于某些类,析构函数基于适合的算子: Windows: HWindow类的析构函数基于close_window关闭窗口。注意:算子本身不是析构器。你可以选择调用CloseWindow关闭窗口,…

ios 上传图片到阿里云的oss_JEECG BOOT 上传如何同时支持阿里OSS、Minio、本地存储

Jeecg-Boot 提供了文件及图片上传功能,前两个文件已介绍了MinIO和OSS配置,现在可根据需要选择上传方式。文件上传接口(图片/文件)在yml文件中可切换图片/文件存储方式访问路径上送参数说明在yml文件中可切换图片/文件存储方式local为本地存储minio为使用…

halcon/c++接口基础 之内存管理

所有的HALCON类,不仅仅HImage,HRegion,HTuple,HFramegrabber等等,还有面向过程的方法中使用的Hobject,都可以使用默认的析构器自动释放内存。 ( see also section 2.4 “Destructors and Halcon Operators”)&#xf…

python时间格式_python 格式化日期

常用的时间函数如下 获取当前日期:time.time() 获取元组形式的时间戳:time.local(time.time()) 格式化日期的函数(基于元组的形式进行格式化): (1)time.asctime(time.local(time.time())) (2)ti…

halcon/c++接口基础 之异常处理

关于运行错误,HALCON/C默认打印错误信息并且终止程序。然而在某些应用中,放宽这个法则可能更有用。比如,如果一个应用要求用户交互式地指定一个图像文件读取,如果因为用户不能拼错文件名而终止程序的话,会很不方便。因…

SVN学习(二)——SVN 提交、更新、解决冲突等操作步骤

1. 纳入版本控制 ①新建文件abc.txt ②在文件上点右键 ③添加后文件图标发生变化 2. 提交 ①使用TortoiseSVN可以提交具体某一个文件,或某一个目录下的所有改变。方法就是在想要提交的项目下点右键,然后SVN Commit...,就可以看到如下界面 ②日…

dat文件打开乱码_5.2 实战1:解决在Linux下打开Windows汉字文本的乱码问题

今天MK继续来分享linux的学习文章,今天讲的主要是实战部分。1.实验环境:CentOS 7.5 现在系统默认使用的语言是汉语。(系统中必须安装好中文包)。2.在windows系统上编辑名字为“a此文件在windows下打开正常-…

整理:深度学习 vs 机器学习 vs 模式识别

发表于2015-03-24 22:58| 11934次阅读| 来源个人博客| 26 条评论| 作者Tomasz Malisiewicz 模式识别深度学习机器学习数据科学家摘要:本文我们来关注下三个非常相关的概念(深度学习、机器学习和模式识别),以及他们与2015年最热门的…

halcon/c++接口基础 之 HALCON图像变量类

在HALCON/C中,HObject是一个基类,可以表示图像变量。另外还有三种类继承自HObject. Class HImage 处理图像Class HRegion 处理区域Class HXLD 处理多边形 Regions 一个region是图像平面坐标点的集合。这样一个区域不需要被连通,而且可能还…

新手求大神,有其他swit-case的思路写这个程序么?

两个程序: switch-case与if-else if的区别相同点:可以实现多分支结构;不同点:switch:一般只能用于等值比较.(可以进行范围运算???---学会用switch计算范围出炉的思路____待解决)if_else if:可以处理范围计算. switch(变量) { case 变量: break; } switch括号中的"变量…

netty简单笔记

2019独角兽企业重金招聘Python工程师标准>>> Server package com.netty;import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.Channel…

halcon/c++接口基础 之 控制参数

HALCON/C可以处理各种不同类型的字母数字混合的控制参数,如下: 离散数字(long)浮点数字(double)字符串(char*) 控制参数的一个特殊形式是句柄,提供了途径去访问复杂的数…

Java编程的逻辑 (84) - 反射

​本系列文章经补充和完善,已修订整理成书《Java编程的逻辑》,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http://…

灰度图像的8位平面分解

所谓灰度图像,即指8位256颜色的图像。将图像的每一位分别取出来,我们就可以将一幅图像分解开来,形成8幅图像。下面我们分别介绍使用matlab分解图像与使用halcon/c分解图像的方法。 matlab8位分解 clc; clear all; A imread(lena.tif); % 显…

css 横线_atom.css正式发布,从此跟CSS框架说拜拜。

atom.css 大家好,我写了一个css库atom.css,蛮好用的,所以忍不住分享给大家。(https://github.com/MatrixAge/atom.css)起因写HTML几年了,再到如今的JSX,最大的感受不是枯燥,而是眼花。写样式的时候&#xf…

halcon模板匹配学习(一) Matching 初印象

什么是模板匹配呢?简单而言,就是在图像中寻找目标图像(模板),或者说,就是在图像中寻找与模板图像相似部分的一种图像处理技术。依赖于选择的方法不同,模板匹配可以处理各种情形下的变换&#xf…

第五章 面向方面编程___AOP入门

上一篇讲了 AOP 和 OOP 的区别,这一次我们开始入门 AOP 。实现面向方面编程的技术,主要分为两大类: 一是 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行; 二…

java将xml中的标签名称转为小写_深入学习Java Web(七): JSTL标签库

本文转自与博客园一杯凉茶的博客.在之前我们学过在JSP页面上为了不使用脚本,所以我们有了JSP内置的行为、行为只能提供一小部分的功能,大多数的时候还是会用java脚本,接着就使用了EL表达式,基本上EL表达式看似能满足我们的要求&am…