菜鸟一枚,只能边看别人的博客变学习来提升自己,参考博客内容:http://blog.csdn.net/column/details/wp-comming.html?page=3 ,稍微看了一下,写的还是非常好的,很详实。


开发工具:Visual Studio XXX for Windows Phone,其中的XXX代表相应的版本比如2010,2102,2013等等,下载这个工具就直接安装就好了,不需要其他的其他的什么工具,非常方便。

WindowPhone的生命周期:

一般来说,在学习一门新的移动语言的时候,都应该从这个地方开始入手,首先要了解你在什么时候能够干什么事情,大致的了解一个程序在手机上运行时的各种状态,在这些状态中需要做那些特殊的处理,这是很有必要的。

WindowsPhone的生命周期的几个主要状态:

  • 启动(Launching)和关闭(Closing)
  • 激活(Activating)和取消激活(DeActivating)
  • 休眠(Dormant)和墓碑(Tombstoned)

主要状态就是以上几个状态,其中还会涉及到快速恢复、页面导航和后退栈等等内容。

先来个稍微简单点的示意图:

1、程序启动时,会调用Application_Launching方法会被调用,程序结束时Application_Closing会被调用,就是上图中Running以上的部分。

2、Activated事件和Deactivated事件

这两个事件是相对应的,举个例子:你正在操作A软件,突然有个电话打过来了,这时候你手机上展示的就是待接电话那个页面,你的A程序的Deactivated事件就被触发了,当你打完电话退出电话界面再次回到A软件时,这时Activated事件就被触发了。

需要注意的是:在程序第一次启动的时候,是不会触发Activated事件的,而且,当这两个事件被触发时,你有可能需要进行相应的数据保存或者数据恢复的操作,因为WindowsPhone系统只是保存了你的程序的运行页面,而不会保存页面中的内容

3.休眠(Dormant)和墓碑(Tombstoned)

Dormant:从上图更可以看出,要达到休眠Dormant状态必须先触发Deactivated事件,然后程序才会进入到休眠状态,当然用户可以恢复休眠的程序,但是不能完全保证一定能从休眠的状态中恢复过来(有可能,该程序被系统回收了).

当程序被休眠时,必须尽可能的在Application_Deactivated中保存数据因为程序可能会被关闭,如果用户不通过长按Back回到那个程序,Application_Deactivated就相当于Application_Closing。你的程序有5秒中的机会去执行保存数据的操作。

Tombstoned:一个程序会和其他程序一起在内存中休眠,如果操作系统的内存不够用了会释放最先的程序的缓存状态,这个过程叫做“墓碑化”。页面导航历史和缓存状态都被墓碑了的程序维护着。

当一个休眠了的程序恢复时,缓存状态会重新加载,程序会回到他离开时的那个页面,所有的对象和他们的状态都在内存里,你可能需要写一些逻辑来重置依赖于时间或网络的调用代码。

当一个墓碑了的程序恢复时,它会重启离开时的页面,但是所有的程序状态会丢失,包括他们的的对象和状态,你需要重新加载控件数据。

休眠程序的时候会涉及到另外一个概念:状态字典

休眠程序的状态信息都存在状态字典里,代码如下:

PhoneApplicationService.Current.State["URL"] = "www.cnblogs.com";

可以在Application_Deactivated函数里存储,然后再页面激活时读取。

所以Application_Deactivated有两件事情要做,保存数据以防程序不能重新激活,保存状态数据以保证程序恢复到正确的状态。

导航和后退栈:

WindowsPhone 程序的导航模型使用起来很方便,可以通过链接到其他页面,可以通过后退键到上一个页面。

WindowsPhone系统维护着这样 一个后退的栈(注意栈的特性),当跳转到另一个页面的时候,当前的页面会被压入到栈中,当后退时, 后退到的那个页面会出栈。

当程序deactivated的时候,系统会保持后退栈,包括当前的页面,但只有页面地址被保存,页面内容并不保存,程序必须在 OnNavigatedTo和OnNavigatedFrom事件里构建页面和保存数据。

学习WindowsPhone 2013/12/22的更多相关文章

  1. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  2. js 日期2015/12/22/16/45替换2015-12-22 16:45格式

    js 日期2015/12/22/16/45替换2015-12-22 16:45格式 利用正则分组: function toChange(date) { var reg = /(\d+)\/(\d+)\ ...

  3. JavaSE学习总结第12天_API常用对象2

      12.01 Scanner的概述和构造方法原理 Scanner类概述:JDK5以后用于获取用户的键盘输入 构造方法:public Scanner(InputStream source) publi ...

  4. 深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全

    深度学习与计算机视觉(12)_tensorflow实现基于深度学习的图像补全 原文地址:Image Completion with Deep Learning in TensorFlow by Bra ...

  5. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

  6. 12.22笔记(关于CALayer//Attributes//CALayer绘制图层//CALayer代理绘图//CALayer动画属性//CALayer自定义子图层//绘图pdf文件//绘图渐变效果)

    12.22笔记 pdf下载文件:https://www.evernote.com/shard/s227/sh/f81ba498-41aa-443b-81c1-9b569fcc34c5/f033b89a ...

  7. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Flutter学习笔记(12)--列表组件

    如需转载,请注明出处:Flutter学习笔记(12)--列表组件 在日常的产品项目需求中,经常会有列表展示类的需求,在Android中常用的做法是收集数据源,然后创建列表适配器Adapter,将数据源 ...

  9. JavaSE学习笔记(12)---线程

    JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...

随机推荐

  1. hdu 2546 典型01背包

    分析:每种菜仅仅可以购买一次,但是低于5元不可消费,求剩余金额的最小值问题..其实也就是最接近5元(>=5)时, 购买还没有买过的蔡中最大值问题,当然还有一些临界情况 1.当余额充足时,可以随意 ...

  2. Winform Windows Media Player 简易播放器 分类: WinForm 2014-07-31 20:12 589人阅读 评论(0) 收藏

    新手上路,高手勿进! 窗体设计: 实现效果: 实现代码: using System; using System.Collections.Generic; using System.ComponentM ...

  3. zoj 3657 策略题 easy

    http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemId=4880 由于是要去牡丹江.是浙大出题,所以找了份浙大的题,第一道水题做的就不顺 ...

  4. 【iOS】iOS之Button segue弹出popOver消除(dismiss)问题

    如图.由于程序须要,点击Button Ctrl+Dragging加入了一个UITableViewController,当然其余的Controller也能够,这样我们在方法 -(void)prepare ...

  5. apache不解析php文档?提示需要下载(转)

    在httpd.cong中 LoadModule php5_module modules/libphp5.so #这一行php5安装的时候就已经自动添加上了 AddType application/x- ...

  6. MYSQL 缓存详解 [myownstars] 经典博客

    http://blog.itpub.net/15480802/viewspace-755582/ 在服务器级别只提供了query cache,而在存储引擎级别,MyISAM和InnoDB分别引入了ke ...

  7. Java语言基础(一)

    Java语言基础(一) 在这里说明一下,有基础的跳过 高手跳过.在这里我想复习以前的东西,以及给正在学java的一些帮助 我用的MyEclipse8.5编写java代码,有需要联系我  QQ:9035 ...

  8. mysqldump备份数据库时出现when using LOCK TABLES

    用mysqldump备份数据库时,如果出现when using LOCK TABLES,解决办法是加上 --skip-lock-tables 例如: 用mysqldump备份数据库时出现 29: Fi ...

  9. [转] Initial Impressions on GraphQL & Relay

    https://kadira.io/blog/graphql/initial-impression-on-relay-and-graphql http://graphql.org/blog/subsc ...

  10. [转] webpack debug in webstorm

    先run build,然后用node server.js来做 WebStorm 11 adds support for debugging client-side apps built with We ...