Hands-On Lab 快速应用程序切换

 

 

Hands-On Lab

快速应用程序切换

 

 

Lab version:    1.0.0

Last updated:          2/29/2012

 


 

内容

概述... 3

课程 . 4

任务 1 – 检测 FAS. 4

任务 2 – 在应用程序中强制执行墓碑机制... 5

课程总结... 5

 


 

 

原有的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时,强制应用程序进入墓碑机制。

 


发布了23 篇原创文章 · 获赞 8 · 访问量 4万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章