快速切换Windows Phone(7.8)

时间:2013-10-22 16:27:26

标签: windows-phone-7

如果我需要真正做任何快速切换的事情,我会有点困惑。好像我没有使用媒体元素,相机和插座,我可以免费“快速切换”。

我不知道如何测试它。我看到几个视频

  1. 点击Windows图标(开始图标)
  2. 点击后退按钮
    1. 按住后退按钮,直到获得屏幕视图
    2. 转到其他应用
    3. 回到你的应用程序。
    4. 这两者似乎再次快速加载但是如果。

      1. 加载应用
      2. 点击Windows图标
      3. 点击平铺应用
      4. 此时是否应该快速切换,还是加载新应用的实例以杀死旧应用?

4 个答案:

答案 0 :(得分:3)

这里涉及不同的概念:

- 首先是快速应用程序恢复,这是Windows Phone 8的一项新功能,您可以启用,以便当您按下应用程序磁贴时,它不会重新启动您的应用程序但保留相同的实例(默认情况下它将只是杀死应用程序,只需重新创建一个新实例,就像应用程序从未打开过一样。您可以找到有关here的更多信息。

- 第二个概念是Fast App Switch和Tombstoning。您可以找到有关应用程序生命周期here的更多信息。基本上发生的情况是,当您按下Windows按钮或导航到另一个应用程序时,您的应用程序将进入休眠状态。在此状态下,应用程序未运行但仍在内存中。当你回去的时候,一切都还在记忆中,一切都应该因为它被取消了。在快速应用程序切换的情况下要处理的主要情况是,当您的应用程序被停用时,所有网络连接都将被终止,因此您应该确保当您返回时不显示任何Web错误消息对话框并且您重做任何失败的网络请求。

应用程序的第二种可能状态是,在应用程序处于休眠状态后,您打开几个应用程序并且设备没有足够的内存,然后它将选择逻辑删除您的应用程序。在该状态下,您的应用程序将从内存中删除,因此您未保存的任何内容都将丢失。当您返回应用程序时,它将返回用户之前所在的页面并重新创建它。
这意味着要在应用程序停用之前处理此案例,您应该:

  • 保存您可能未通过导航参数传递的任何上下文特定数据。
  • 可能保存用户当前正在做的事情(例如,如果他当前正在输入长文本,最好保存它以便用户不必从头重新输入)
  • 保存当前滚动位置或所选项目之类的内容可能是一个加号

此外,当应用恢复时,您必须确保重新查询所需的所有信息。如果您在主页的OnNavigatedTo中加载一些数据(例如来自Web服务器),然后只重用详细信息页面上的数据而不重新查询它,那么可能会破坏的一个示例。如果你在详细信息页面上按下开始按钮然后做一些其他和应用程序tombstonne,当你回到应用程序而不是数据将无法使用(因为内存已被“清除”并且在onNavigatedTo主页面未调用,因为它将直接导航回详细页面。)

您可以使用page state and application state保存正确处理逻辑删除案例所需的任何信息。基本上有一个字典,你可以添加一些将被序列化的对象(所以你需要确保你试图保存的任何对象是可序列化的),当应用程序被停用时。

要轻松测试Tombtonning案例,您可以在项目属性中执行,在“调试”选项卡中选中“调试时停用时删除墓碑”复选框。像这样,当你调试并按下Windows按钮或转到另一个应用程序时,它总是会让应用程序变得僵硬。为了检查它是否真的是墓碑,当你回去时你应该看到你的应用程序显示一个恢复屏幕几秒钟(而在墓碑的情况下它几乎是瞬间。

答案 1 :(得分:0)

所以这有点令人困惑。我花了很长时间才弄明白这是什么意思。

哪些快速切换引用适用于更复杂的应用程序。利用需要已保存状态的应用的应用。

例如,如果您要创建导航应用程序。您正在导航然后离开应用程序。当您返回该应用程序时,它应显示“正在恢复...”指示符,然后将您的应用程序恢复到之前的状态。

这是FAS上的第9频道视频

http://channel9.msdn.com/events/MIX/MIX11/DVC09

这里也是关于它的MSDN文章

http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff967547(v=vs.105).aspx

答案 2 :(得分:0)

  

此时是否应该快速切换,还是加载新应用的实例以杀死旧应用?

在这种情况下,您的新实例将会启动。

实际上,它有点令人困惑,但不是那么多。

  • 应用程序可以关闭(通过Windows键或按住BAck键一段时间)或退出(通过按主菜单中的返回键)。接下来,应用程序进入休眠状态,它将所有内容保存在内存中。 ApplicationDeactivated将会升级。
  • 因此,如果您只是重新激活它(通过按Back并选择您的应用程序,或者按Back only,如果堆栈中没有其他内容),则会重新启动它。 ApplicationActivated事件将通过e.IsApplicationInstancePreserved = true
  • 上升
  • 如果你要使用很多其他应用程序(设备内存不足),你的应用程序将进入逻辑删除状态。然后,您需要恢复所有数据。 e.IsApplicationInstancePreserved将为false。
  • 如果您要重新启动应用程序(通过点击磁贴),将启动新实例,并且ApplicationLaunching将会升级。

答案 3 :(得分:0)

快速切换并不是您作为开发人员真正关心的问题。你需要担心的是“墓碑” - 当有人离开你的应用程序时,你需要保存状态:当用户切换回它时,你作为开发人员必须假设你的应用程序实际上是重新启动从头开始并需要重新加载保存状态。这是Application_LaunchingApplication_Activated之间的差异(用户从开始屏幕重新启动了您的应用,而应用已暂停,现在正在恢复,但是从头开始)。

在某些早期,这是应用切换工作的唯一方式。之后添加了快速应用程序切换,并简单地更改了合同,以便有时您的应用程序将在其停止的位置恢复而不会被墓碑化。它取决于内存等,但它对用户来说只是一个好处,在许多情况下,用户不再需要等待应用程序重新加载其逻辑删除状态。你作为开发者仍然必须假设你将被墓碑化。