应用程序生命周期.docx

上传人:b****7 文档编号:23397401 上传时间:2023-05-16 格式:DOCX 页数:45 大小:1.34MB
下载 相关 举报
应用程序生命周期.docx_第1页
第1页 / 共45页
应用程序生命周期.docx_第2页
第2页 / 共45页
应用程序生命周期.docx_第3页
第3页 / 共45页
应用程序生命周期.docx_第4页
第4页 / 共45页
应用程序生命周期.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

应用程序生命周期.docx

《应用程序生命周期.docx》由会员分享,可在线阅读,更多相关《应用程序生命周期.docx(45页珍藏版)》请在冰豆网上搜索。

应用程序生命周期.docx

应用程序生命周期

Hands-OnLab

WindowsPhone应用程序生命周期—Tombstoning

 

实验版本号:

1.0.0

最后更新:

9/22/2018

目录

概述3

练习1:

介绍WindowsPhone应用程序生命周期--Tombstoning7

任务1–创建用户界面7

任务2–应用程序执行模型19

总结44

概述

在WindowsPhone上运行的应用程序从开始到程序运行结束,其整个生命周期都是由Windowsphone的执行模型所支配。

执行模型被设计的目的就是为终端用户实时提供快速的、反应灵敏的体验。

为了实现这样的初衷,WindowsPhone仅仅允许在前台运行一个应用程序—即与用户进行交互的可见的当前应用程序。

这样做就消除了用户在其移动终端设备后台上运行多个应用程序而导致的程序间竞争有限的系统资源,而使用户的移动终端设备处于较低的性能和电池电量极具减少的可能性。

Windowsphone执行模型还维护着用户使用应用程序和查看页面所产生的日志。

利用该日志就能定义电话后退键所遵循的后退路径,从而提供给用户一个能够回退到不同应用程序和浏览页面的后退选项。

这个功能在用户使用一个应用程序访问某一站点或者其他电话服务时是非常有用的,用户能够在任何时候轻易地通过点击回退键而返回到之前的体验当中。

正如上面提到的,仅允许在前台运行一个应用程序并且在后台不允许其他第三方程序运行。

因此,当用户离开当前的应用程序,无论是使用图片选配,还是启动某种功能,比如打电话。

Windowsphone将会在有限的时间里暂停其当前应用程序。

如果操作系统需要当前资源,那么正在使用中的应用程序还可能会被终止。

当用户通过导航键功能离开某一应用程序时,操作系统执行挂起该程序的步骤被称之为tombstoning(墓碑机制)。

操作系统会维护应用程序状态信息。

如果用户返回到被挂起的应用程序中,此时操作系统会继续执行被挂起应用程序的进程(或者重新启动它,这取决于该程序之前是否被终止)并传递状态数据给此应用程序。

这就保证了用户能够准确无误地从之前与程序交互时的暂存挂起点继续执行应用程序的进程。

这个实验关注的是WindowsPhone应用程序生命周期相关的tombstone(或者tombstoning)方面,主要处理tombstone及其产生的结果。

目的

通过这个实验您将会:

∙熟悉与WindowsPhone7应用程序生命周期的tombstoning功能相关方面的内容。

∙理解应用程序是如何执行启动、激活、禁止以及结束事件等操作。

∙创建一个简单的Silverlight应用程序示例,该示例利用相关技术来保存用户离开当前应用程序时的状态,并能根据已保存的状态帮助用户恢复到原应用程序。

前提条件

要完成这个实验需要以下条件:

∙用于WindowsPhone的MicrosoftVisualStudio2010Express版本或者是MicrosoftVisualStudio2010

∙WindowsPhone开发者工具

注意:

集成以上所有工具的程序包能从以下地址下载

安装

为了方便起见,这个实验手册中用到的大部分程序代码是以小段VisualStudio代码形式提供:

1.运行试验目录下Source\Setup文件夹中的SetupLab.cmd脚本来检查程序相关性和必备的安装先决条件.

2.当您已经验证了每一个先决条件,那么请按照以下说明来安装代码段。

使用代码段

利用这些代码段,您实际上已经获得了编程操作所会用到的所有代码。

这个实验手册将会准确的告诉您何时使用这些代码。

例如,

图表1

利用VisualStudio代码段向您的工程中插入代码

想在VisualStudio中加入代码段,您只需简单的把光标移动到您想插入代码的位置,然后键入代码名称(请不要带空格和连字符),当看到有智能感知(IntelliSense)程序为您选择代码名称时,且代码段名是您需要的那个时,请按两次Tab键。

代码将会被插入到光标所处位置。

图表2

开始键入代码段名称

图表3

按Tab键来选择被高亮的代码段

图表4

再次按Tab键来展开代码段

想利用鼠标而不是键盘来插入一段代码:

右键点击您想要插入代码段的地方,选择InsertSnippet然后选择MyCodeSnippets,然后从列表里选择相关的代码。

想了解更多VisualStudioIntelliSenseCodeSnippets,包括如何创建自己的代码段请参阅:

练习

这个实验手册包含了以下的一些练习:

3.介绍WindowsPhone应用程序生命周期—Tombstoning

 

完成此实验估计耗时:

45分钟

练习1:

介绍WindowsPhone应用程序生命周期--Tombstoning

在本章节中我们将会创建一个新的Silverlight应用程序。

这个应用程序是一个简单的只有两个页面的旅行报告,通过该应用程序您将体验到tombstoning是如何工作的。

您将会:

∙增加并导航到多个页面

∙处理应用程序和页面导航事件

我们将会使用VisualPhoneDeveloper2010Express开发环境来部署一个WindowsPhoneEmulator,并以此进行调试。

这个解决方案使用的是基于WindowsPhone应用程序模板的Silverlight。

在开发过程中,我们将会为WindowsPhone的具体工程,即WindowsPhonePortraitPage来添加一个Silverlight应用程序。

注意:

这个实验手册过程所阐述的步骤使用了集成WindowsPhone开发者工具的MicrosoftVisualStudio2010,但是同样适用于针对WindowsPhone的MicrosoftVisualStudio2010Express版本。

实验手册中一般涉及到VisualStudio的地方,对这两种产品都是适用的。

任务1–创建用户界面

在这个任务中,您需要创建一个基于MicrosoftVisualStudio2010Express(针对WindowsPhone)或者基于MicrosoftVisualStudio2010的解决方案。

这个解决方案将会是只包含2个页面的简单的WindowsPhone7应用程序以及一些为这个实验中后续任务所进行的准备工作。

4.从操作系统的开始|所有程序|MicrosoftVisualStudio2010Express处打开MicrosoftVisualPhoneDeveloper2010Express。

VisualStudio2010:

从操作系统的开始|所有程序|MicrosoftVisualStudio2010处打开VisualStudio2010。

5.进入File菜单,选择NewProject。

VisualStudio2010:

在File菜单,指向new然后选择Project/Solution.

6.创建一个新的SilverlightWindowsPhone工程,并设置工程名称为“ApplicationLifecycle“同时设置解决方案的名称为”Begin“,设置完毕后点击”OK“。

图表5

创建一个新的解决方案

7.为创建的工程添加一个新的工程文件夹并命名为Misc。

具体步骤是,在工程名称(ApplicationLifecycle)上右键单击,选择Add然后选择NewFolder:

图表6

创建一个新的工程文件夹

8.把{LAB_PATH}\Assets文件夹中系统提供的辅助类添加到Misc文件夹。

为了实现这个功能,需要在Misc上右键单击,选择Add然后从右面扩展菜单中选择ExistingItem:

图表7

添加assets到工程中

注意:

做为选择,您可以通过选中Misc文件夹然后通过按Shift+Alt+A快捷键来实现本功能

9.在“AddExistingItem“对话框中,转到LabAssets文件夹的所在路径,然后选择所有的assets源文件,点击Add:

图表8

添加assets

DateTimeToStringConverter用来实现旅行开始和结束日期与用户界面(UI)空间之间的绑定,同时完成必需的SL数据转换。

TravelReportInfo是一个模型类,用来表示一个旅程;它包含了描述旅行的数据域

Utils正如它的命名一样,是一个泛型类,它被整个工程中各种各样的函数广泛使用。

10.在工程的引用中添加一个针对System.Xml.Serialization的引用程序集。

在工程References文件夹上右键单击选择AddReference:

图表17

添加一个新引用的程序集

11.在AddReference对话框中的组件列表中选择System.Xml.Serialization然后单击OK:

图表18

添加一个引用

12.利用Assets文件夹中的SplashScreenImage.jpg来替换解决方案中缺省的图片。

首先,通过右键单击然后选择Delete来删除原有的图片:

图表9

删除原有图片

13.根据前面提供的步骤来为解决方案添加一个ExistingItem,从{LAB_PATH}\Assets文件夹中选择SplashScreenImage.jpg,在要添加的图片上右键单击然后选择属性:

图表10

打开文件属性

14.检查BuildAction的值是否被设置为Content:

图表11

BuildAction设置

15.打开MainPage.xaml并根据以下的说明修改此文件。

16.在页面中添加一个关于应用程序命名空间的引用—在“PhoneApplicationPage”元素中添加如下代码段:

XAML

xmlns:

local="clr-namespace:

ApplicationLifecycle"

17.为LayoutRootGrid.Resources元素添加一个日期时间转换器(之前已经被添加到Misc文件夹)。

这就声明了该日期时间转换器已作为一个资源,我们以后可在XAML中利用它

XAML

DateTimeToStringConverter

x:

Key="dateTimeToStringConverter"/>

18.更改ApplicationTitle文本块的文本属性为“TRAVELREPORT”:

XAML

Name="ApplicationTitle"Text="TRAVELREPORT"Style="{StaticResourcePhoneTextNormalStyle}"/>

19.更改PageTitle文本块的文本属性为“MyTrip”:

XAML

Name="PageTitle"Text="MyTrip"Margin="9,-7,0,0"Style="{StaticResourcePhoneTextTitle1Style}"/>

20.利用下面的代码段替换ContentPanel中的内容:

XAML

Name="ContentPanel"Grid.Row="1"Margin="12,0,12,0">

"Style="{StaticResourcePhoneTextLargeStyle}"VerticalAlignment="Center"/>

Name="txtDestination"Text="{BindingDestination,Mode=TwoWay}"Width="362"InputScope="AddressCity"/>

"Style="{StaticResourcePhoneTextLargeStyle}"VerticalAlignment="Center"/>

Name="txtFromDate"Text="{BindingFirstDay,Mode=TwoWay,Converter={StaticResourcedateTimeToStringConverter},ValidatesOnExceptions=True,NotifyOnValidationError=True}"Width="330"InputScope="Digits"BindingValidationError="Date_BindingValidationError"/>

"Style="{StaticResourcePhoneTextLargeStyle}"VerticalAlignment="Center"/>

Name="txtToDate"Text="{BindingLastDay,Mode=TwoWay,Converter={StaticResourcedateTimeToStringConverter},ValidatesOnExceptions=True,NotifyOnValidationError=True}"Margin="2,0,0,0"Width="330"InputScope="Digits"BindingValidationError="Date_BindingValidationError"/>

"Style="{StaticResourcePhoneTextLargeStyle}"/>

Name="txtJustification"Text="{BindingJustification,Mode=TwoWay}"AcceptsReturn="True"Height="160"VerticalScrollBarVisibility="Auto"/>

Name="btnNext"Width="230"Click="btnNext_Click"/>

Name="btnCancel"Width="230"Click="btnCancel_Click"/>

21.打开MainPage.xaml.cs并添加如下的时间处理代码段:

C#

privatevoidDate_BindingValidationError(objectsender,ValidationErrorEventArgse)

{

e.Handled=true;

MessageBox.Show("Invaliddatevalue.\nPleasetryagain","Invaliddatevalueorformat",MessageBoxButton.OK);

}

privatevoidbtnNext_Click(objectsender,RoutedEventArgse)

{

//TODO:

Navigatetosecondpage

}

privatevoidbtnCancel_Click(objectsender,RoutedEventArgse)

{

//TODO:

CleartheDataContextobject

}

22.为应用程序添加额外的页面。

在应用程序名字上右键单击,选择Add并在扩展菜单列表中选择NewItem。

图表12

为应用程序添加一个新的页面

23.选择WindowsPhonePortraitPage,命名为SecondPage然后点击Add。

图表13

新建纵向页面(PortraitPage)

24.如果SecondPage.xaml没有被自动打开那么手动打开它。

25.根据以下代码段来更改TitlePanel面板的内容:

XAML

Name="ApplicationTitle"Text="TRAVELREPORT"Style="{StaticResourcePhoneTextNormalStyle}"/>

Name="PageTitle"Text="MyTrip"Margin="9,-7,0,0"Style="{StaticResourcePhoneTextTitle1Style}"/>

26.为ContentPanel的内容添加如下代码段:

XAML

"Style="{StaticResourcePhoneTextLargeStyle}"/>

Name="txtSummary"Text="{BindingSummary,Mode=TwoWay}"AcceptsReturn="True"Height="460"VerticalScrollBarVisibility="Auto"/>

Name="btnSave"Width="230"Click="btnSave_Click"/>

Name="btnCancel"Width="230"Click="btnCancel_Click"/>

27.打开SecondPage.xaml.cs并为其添加事件处理程序代码:

C#

privatevoidbtnSave_Click(objectsender,RoutedEventArgse)

{

//TODO:

Savefunctionalityhere

}

privatevoidbtnCancel_Click(objectsender,RoutedEventArgse)

{

//TODO:

CleartheDataContextobject

}

28.打开MainPage.xaml.cs,并定位下面这行注释:

C#

//TODO:

Navigatetosecondpage

29.用以下代码替换原注释:

C#

//Navigatetosecondpage

NavigationService.Navigate(newUri("/SecondPage.xaml",UriKind.Relative));

30.重载OnBackKeypress的缺省行为–-缺省的行为假设用户正要通过导航键离开当前应用程序并正在被问及是否要保存当前的旅行报告数据。

然而,如果用户在应用程序第一个页面就点击Back同时此页面也是应用程序日志记录中的第一条,那么应用程序就不会询问用户是否保存旅行报告数据而直接退出。

如果在这种情况下要给用户保存报告数据的选择,那就把以下代码片段键入到这个类的最下面:

C#

protectedoverridevoidOnBackKeyPress(System.ComponentModel.CancelEventArgse)

{

base.OnBackKeyPress(e);

//Askusertopreservedatainpersistentstore

MessageBoxResultres=MessageBox.Show("Doyouwanttosaveyourworkbefore?

","Youareexitingtheapplication",MessageBoxButton.OKCancel);

if(res==MessageBoxResult.OK)

Utils.SaveTravelReport(

(App.Current.RootVisualasPhoneApplicationFrame).DataContextasTravelReportInfo,

"TravelReportInfo.dat",

true);

else

Utils.ClearTravelReport((App.Current.RootVisualasPhoneApplicationFrame).DataContextasTravelReportInfo);

}

31.编译这个应用程序,并根据需要修改编译中的错误。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1