2

如果我真的需要为快速切换做任何事情,我会有点困惑。如果我不使用媒体元素、相机和插座,我似乎可以免费获得这种“快速切换”。

我不确定如何测试它。我看到几个视频在哪里

  1. 点击 Windows 图标(开始图标)
  2. 点击后退按钮

或者

  1. 按住后退按钮直到获得屏幕视图
  2. 转到其他应用程序
  3. 回到你的应用程序。

这些似乎都再次快速加载,但如果。

  1. 加载应用程序
  2. 点击窗口图标
  3. 点击磁贴应用

此时是否应该进行快速切换,或者它是否会加载应用程序的新实例而杀死旧应用程序?

4

4 回答 4

3

这里涉及不同的概念:

-第一件事是快速应用恢复,这是 Windows Phone 8 的一项新功能,您可以启用它,这样当您按下应用程序磁贴时,它不会重新启动您的应用程序而是保持相同的实例(默认情况下它只会终止应用程序并且只是重新创建一个新实例,就好像该应用程序从未打开过一样)。您可以在此处找到更多相关信息。

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

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

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

此外,当应用程序恢复时,您必须确保重新查询所需的所有信息。如果您在主页的 OnNavigatedTo 中加载一些数据(例如从 Web 服务器),然后只是重用详细信息页面上的数据而不重新查询它,则会破坏的一个示例。如果您在详细信息页面上,请按开始按钮,然后执行其他操作和应用程序墓碑,当您返回应用程序时,数据将不可用(因为内存已被“清除”并且主页面的 onNavigatedTo不会调用,因为它将直接导航回详细信息页面)。

您可以使用页面状态和应用程序状态来保存正确处理墓碑案例所需的任何信息。基本上,当应用程序停用时,您可以在字典中添加一些将被序列化的对象(因此您需要确保您尝试保存的任何对象都是可序列化的)。

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

于 2013-10-22T23:00:27.970 回答
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

于 2013-10-22T16:35:13.787 回答
0

此时是否应该进行快速切换,或者它是否会加载应用程序的新实例而杀死旧应用程序?

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

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

  • 应用程序可以关闭(通过 Windows 键或按 BAck 键一段时间)或退出(通过在主菜单中按 Back 键)。接下来,应用程序进入休眠状态,它将所有内容保存在内存中。ApplicationDeactivated 将上升。
  • 因此,如果您只是重新激活它(通过按返回并选择您的应用程序,或者仅按返回,如果堆栈中没有其他内容),它将被恢复。ApplicationActivated 事件将在 e.IsApplicationInstancePreserved = true 时引发
  • 如果您将使用许多其他应用程序(设备内存不足),您的应用程序将进入墓碑状态。然后,您需要恢复所有数据。e.IsApplicationInstancePreserved 为假。
  • 如果您重新启动您的应用程序(通过单击磁贴),将启动新实例,并启动 ApplicationLaunching。
于 2013-10-22T16:35:44.570 回答
0

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

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

于 2013-10-22T16:46:06.700 回答