遗忘征服者的头盔哪出:Windows Phone7 不温不火学习之《应用程序生命周期》(2)_银光中国 Silv...
来源:百度文库 编辑:九乡新闻网 时间:2024/10/06 00:20:28
银光中国 Silverlight 资源 社区 论坛
- 会员中心
- TAG标签
- 网站地图
- RSS订阅
- 主页
- 银光动态
- Silverlight
- WPF
- Windows Phone 7
- 应用专题
- 作品展示
- 开发者论坛
热门标签
- Silverlight 4
- 自定义
- 设计器
- 开源
- game
- 组件
- Windows Phone 7学习教程
- Windows Phone 7资源下载
- Windows Phone 7国外资料
- Windows Phone 7视频教程
Windows Phone7 不温不火学习之《应用程序生命周期》(2)
时间:2010-12-17 23:49来源:博客园 作者:Terry_龙 点击:377次1.启动 当用户点击了手机上应用程序安装列表的某一应用程序,或者点击了开始屏幕上的代表某一应用程序的小方块图标 ,此时应用程序就被启动了。无论用户以哪种方式启动应用程序,该程序的实例就会被创建。当应用程
1.启动
当用户点击了手机上应用程序安装列表的某一应用程序,或者点击了开始屏幕上的代表某一应用程序的小方块图标 ,此时应用程序就被启动了。无论用户以哪种方式启动应用程序,该程序的实例就会被创建。当应用程序被启动了,也就是一个启动事件被触发了。处理这个启动事件时,应用程序应该从一个独立的存储中读取所有必要的数据来为用户创建一个新的应用程序会话进程。应用程序不应该试图从以前的应用程序实例中恢复瞬时状态。此是这是一个全新的应用实例。
Note that:启动和激活事件是互斥的。
2.运行
当启动事件被触发了,一个应用程序就开始运行了。应用程序处于运行状态时,用户进行浏览该应用程序的页面等相关操作,此时应用程序会自己管理自己的状态。如果应用程序处于运行状态,那么与执行模型相关的唯一操作就是逐步的保存设置以及其他应用程序持久化数据,这样做的目的是为了避免当应用程序的状态发生改变时需要保存大量的数据。
3.关闭
应用程序处于运行状态之后的状态是取决于用户采用了哪种操作。一个可能的操作是用户按下手机的回退键从而回退到应用程序的前一页面,甚至翻过了应用程序的第一个页面。当这种情况发生时,关闭事件会被触发,从时应用程序被终止 了。处理关闭事件,应用程序应该把所有的持久化数据保存到独立的存储中。此时没有必要保存瞬时状态数据,即那些只有和前应用程序实例相关的数据。因为用户如果要返回一个己经被终止的应用程序,唯一的方法应当是启动它,打开它的首页。这就是单任务的好处。
4.禁止
如果一个应用程序正在运行,随后在操作系统前台被另一个应用程序或者体验替代,例如,锁屏或者启动一个Chooser,这时第一个应用程序将会被禁止。禁止相当于Android 的onPause事件。此时如果操作检测到资源不足,可能会对该程序进行逻辑删除。由于会存在被逻辑删除的危险,所以并不能保证一个被禁止的应用程序会被重新激活,所以在此事件的处理中应用程序需要一直把持久化数据保存到一个独立的存储空间。
Note that:禁止事件处理程序所进行的所有操作必须在10秒钟内完成,否则操作系统将会直接终止应用程序而不是逻辑删除。
5.激活
当一个应用程序被禁止后,有可能这个应用程序永远不会被再次激活。用户可能会从头再重新启动该应用程序,从而得到一个新的应用程序实例。或者用户可以启动其他几个应用程序,这样就会把处于应用程序堆栈最后的即使利用回退键也不可能到达的欺骗性程序关闭掉。当然用户也有继续要使用原应用程序的可能性。这种情况可能会发生在用户不停地敲击回退键来达到指定应用程序目的。这个和Android的回退键倒是十分相似。
开发人员可以使用墓碑机制事件来保存就应用程序状态和页面状态。利用这些状态,开发人员可以把应用程序恢复到最后一个正确的状态。你要了解一下以下两点:
应用程序状态 是就应用程序的一种状态且并不与任何特定页面有关联。应用程序状态是在 PhoneApplicationService 类公开的事件中管理的。
页面状态 是一种应用程序页面可见的状态。它包含了诸如 ScrollViewer 控件中滚轴的位置和 TextBox 控件 中的内容等信息。页面的状态管理应该由OnNavigatedTo 和 OnNavigatedFrom 事件处理程序来处理。
下面我们就针对上述所讲的,总结成一个DEMO吧:
首先我们在App.xaml文件中在针对的生命周期方法中键入代码,以下代码可供参考:
Application_Launchingprivate void Application_Launching(object sender, LaunchingEventArgs e)
{
//Trace the event for debug purposes
Utils.Trace("Application Launching");
//Create new data object variable
TravelReportInfo travelReportInfo = null;
//尝试从以前保存过的独立数据加载数据
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
//验证是否存在
if (isf.FileExists("TravelReportInfo.dat"))
{
using (IsolatedStorageFileStream fs = isf.OpenFile("TravelReportInfo.dat", System.IO.FileMode.Open))
{
//Read the file contents and try to deserialize it back to data object
XmlSerializer ser = new XmlSerializer(typeof(TravelReportInfo));
object obj = ser.Deserialize(fs);
//如果成功反序列化,则初始化变量
if (null != obj && obj is TravelReportInfo)
travelReportInfo = obj as TravelReportInfo;
else
travelReportInfo = new TravelReportInfo();
}
}
else
//If previous data not found, create new instance
travelReportInfo = new TravelReportInfo();
}
//设置当前的数据上下文为tranvelInfo,页面启动完毕后我们就可以通过dataContext 获取数据
RootFrame.DataContext = travelReportInfo;
}Application_Activated
private void Application_Activated(object sender, ActivatedEventArgs e)
{
//Trace the event for debug purposes
Utils.Trace("Application Activated");
//Create new data object variable
TravelReportInfo travelReportInfo = null;
//试着找出以前的数据状态
if (PhoneApplicationService.Current.State.ContainsKey("UnsavedTravelReportInfo"))
{
//如果找到,则从中还原出来,并删除掉之前保存的状态
travelReportInfo = PhoneApplicationService.Current.State["UnsavedTravelReportInfo"] as TravelReportInfo;
PhoneApplicationService.Current.State.Remove("UnsavedTravelReportInfo");
}
//因为应用可能会被逻辑删除,所以不能保证会被激活 ,如果程序被逻辑删除则创建新的数据
if (null != travelReportInfo)
RootFrame.DataContext = travelReportInfo;
else
RootFrame.DataContext = new TravelReportInfo();
}Application_Deactivated
private void Application_Deactivated(object sender, DeactivatedEventArgs e)
{
//Trace the event for debug purposes
Utils.Trace("Application Deactivated");
//将当前的应用程序状态保存进数据中
PhoneApplicationService.Current.State.Add("UnsavedTravelReportInfo", RootFrame.DataContext as TravelReportInfo);
}private void Application_Closing(object sender, ClosingEventArgs e)
{
//Trace the event for debug purposes
Utils.Trace("Application Closing");
}
以上代码都做了注释了。
下面运行模拟器,查看一下日志的输出,ctrl+w+0:
当页面启动时:
顶一下(0)0.00%踩一下(0)0.00%------分隔线----------------------------
- 上一篇:Windows Phone Marketplace发布攻略
- 下一篇:为Windows Mobile设备创建位置感知的应用程序
- 收藏
- 挑错
- 推荐
- 打印
- 最新评论 查看所有评论
- 发表评论 查看所有评论
- 推荐内容
- Windows Phone Marketplace 发布软件全攻略
如何在Windows Phone Marketplace 里面发布软件?哈,利用自己的脑力去赚钱吧,开发手...
- Windows Phone 7 优秀开源项目概览
在介绍正题之前,先向大家推荐一个 非常好的网站 ,它的维护者是微软前Silverlight程...
- Windows Phone 7与Windows Phone 6.5功能对比
Windows Phone 7标志微软正式正视消费市场,要做的是如何兼容商用市场,有可能把原先...
- 深度解析Windows Phone 7开发
近两年来,智能手机市场似乎已经成为iPhone、Android争妍斗艳的舞台,Windows Mobile...
- Windows Phone 7系列应用和游戏开发内容汇总
就在刚刚结束的 Mix10 第一天主旨演讲上,Scott Guthrie 和 Joe Belfiore 宣布并演示...
- Windows Phone Marketplace 发布软件全攻略
- 热点内容
- Windows Phone 7 SDK 官方正式版
- 深度解析Windows Phone 7开发
- 一起学Windows phone7开发:一个
- Windows Phone 7与Windows Phone
- 怎样在Windows Phone上记录笔记
- 通过模拟器看Windows Phone 7
- 入门WP7 - 1.搭建Windows Phone
- Windows Phone 7 优秀开源项目概
- Windows Phone 7开发环境搭建
- Windows Phone 7 开发框架预览
Copyright © 2009 - 2011 SilverlightChina. 银光中国
沪ICP备10206900号