Hands-On Lab
快速应用程序切换
Lab version: 1.0.0
Last updated: 2/29/2012
内容
原有的Windows® Phone操作系统拥有的每个应用程序没有激活墓碑机制,这就意味着其状态会序列化并被保存在应用程序的独立存储中。当用户返回墓碑化的应用程序时,他不得不等待应用程序反序列化其状态并恢复状态。
在Windows® Phone Mango版本中不再需要这样的机制了。一旦应用程序被切换到后台,操作系统将保证其镜像仍然保存在内存中,这样在激活应用程序时就不需要额外的性能开销了。当用户再次激活应用程序时,用户体验可以达到在瞬间恢复应用程序在内存中的状态。
这种新的机制叫做快速应用程序切换(Fast Application Switching ,FAS),在本次实验中,我们将演示在应用程序切换到后台后,如何存储应用程序的状态。了解您的应用程序镜像是否被保存,允许你执行必要的操作来恢复应用程序的状态。本次实验中将演示如何使用Tidy应用程序来执行这种。
目标
本次动手实验,包括下列的任务:
· 识别,一旦你的应用程序被激活,镜像是否被保持。
· 在Debug状态下,强制应用程序执行墓碑机制。
前提条件
您在开始本次动手实验前,请先确认达到下列前提条件:
· Microsoft Visual Studio 2010 或者 Microsoft Visual C# Express2010, 和 Windows® Phone 7 Codenamed “Mango” Developer Tools,下载地址: http://go.microsoft.com/?linkid=9772716
· 如何创建 Windows® Phone 7应用程序的支持
(如果您是新的Windows® Phone 7开发者,您可以首先阅读:
http://msdn.microsoft.com/en-us/gg266499).
· 熟悉 Windows® Phone应用程序生命周期管理系统.
本次动手实验没有演示如何在应用程序里实现状态保存。存储已经在Tidy应用程序中实现了,我们要实验这些代码如何与FAS交互。
任务 1 – 检测 FAS
Thistask shows how easy it is to know that the application was restored from itspreserved in-memory image.
这个任务将演示如何容易了解,应用程序是否从其保存在内存中的镜像中还原了。
1. 打开位于Source\End 目录的 Tidy 应用程序解决方案,定位 Todo 工程打开 App.xaml.cs文件.
2. 通过App 类的 Application_Activated方法查看应用程序如何控制激活:
C#
private voidApplication_Activated(object sender, ActivatedEventArgs e)
{
// Ensure that application state is restored appropriately
if (!e.IsApplicationInstancePreserved)
{
WasTombstoned= true;
App.AppInitialized = true;
Thread initialDataLoad = newThread(new ThreadStart(InitializeData));
initialDataLoad.Start();
}
else
{
WasTombstoned= false;
}
}
请注意 ActivatedEventArgs 中包含了 IsApplicationInstancePreserved属性. 通过该属性,可以容易地了解应用程式是否保存在内存中,如果应用程序保存了,则为true,如果墓碑机制被触发则为false。
当Tidy应用程序初始化时,这个耗时的任务会连接存储应用程序数据的本地数据库,并且将数据加载到内存中。当应用程序被存储在内存中时,这些长时操作就没必要发生,从数据库中加载的数据仍然保存在内存中。
提示:上面的例子演示了,如果应用程序的镜像被存储,则不需要进一步的初始化工作。事实并非总是如此,当应用程序镜像被存储时,不能执行任何操作。一旦镜像被存储,你也许需要做一些额外的操作。
例如,如果你的应用程序使用socket(另外一项WindowsPhone Mango的新功能),应用程序切换到后台时,无论触发墓碑机制与否,由于应用程序无法暂停,所有活动连接将会被终止。一旦你的应用程序被重新激活,你需要重新建立网络连接。
任务 2 –在应用程序中强制执行墓碑机制
Windows® Phone Mango 应用程序生命周期管理器的默认行为,是尽可能存储到内存中。如果您的应用程序墓碑机制是非常复杂的,设备没有足够内存时才会触发墓碑机制,删除掉某些应用程序镜像,而对于调试来说,这种情况的出现就太过困难了。
Luckily, the new developer tools allow us to force an application toforego FAS in favor of tombstoning. We will now see how to force an applicationto tombstone.
幸运的是,新的开发工具中允许开发者强制应用程序忽略FAS,直接进入墓碑机制。我们将看到如何强制应用程序进入墓碑机制。
1. 访问 Todo 工程的属性,访问到 “Debug” 页面:
Figure 1
A phoneapplication project’s debug settings
2. 选中 “Tombstone upon deactivation while debugging”复选框。你的应用程序将会执行墓碑机制代码,并且附加调试器。清空复选框,则应用程序会再次进入FAS状态。
本次动手实验演示了如何检测FAS,并且如何提高存储应用程序状态的用户体验。我们也了解了如何在Debug时,强制应用程序进入墓碑机制。