何时保存应用程序的逻辑删除状态?

时间:2011-01-07 10:33:24

标签: windows-phone-7 tombstoning

我想知道什么时候更适合保存单个页面的视图模型。

我看到两种可能性:

  1. 每次从它进行导航时保存每个页面的状态(它的视图模型),以便在逻辑删除过程中应用程序碰巧被终止并重新激活时已保存它。
  2. 在应用程序停用事件中,浏览导航堆栈中的所有页面并保存其状态(其视图模型),然后在应用程序激活事件中重新注入它。
  3. 处理它的正确方法是什么?

    THX 西蒙

4 个答案:

答案 0 :(得分:3)

我认为这取决于您的需求,但您不太可能需要偏离文档,这表明应用程序已停用事件作为保存持久性和瞬态(状态)数据的适当位置,而close应该只保存持久性。 Execution Model Overview(参见激活下的控制流程图)

This article也提供了一个不错的解释,包括应用程序生命周期和逻辑删除的示例,区分退出/关闭,停用和逻辑删除。

您无法预测用户何时会在页面更改之间更改前台应用。但是,您可以预测关闭或停用时会发生什么。因此,在视图之间保存页面状态似乎无关紧要。

答案 1 :(得分:2)

不幸的是,保存状态的“最佳”时间将取决于:应用程序;每页使用的模型的复杂性;每个页面支持的交互;以及页面之间共享的模型的复杂性(在应用程序级别)。

作为通用规则,我尝试在应用程序级别拥有一个模型,并在激活/停用时保留该模型。页面模型是对应用程序级别模型的一部分的引用,我只保留有关页面导航的页面特定信息。

我坚持的页面特定信息的示例是:输入但未保存的数据;和滚动位置。

答案 2 :(得分:1)

我无法对之前的答案进行投票,因为我没有足够的“声誉”,但是,任何瞬态状态信息都应该保存在Application.Deactivated事件中,然后在Application.Activated事件中恢复以进行墓碑支持

如果您需要在应用程序会话之间存储任何内容,那么您可以使用Application.Closing事件,但根据您需要存储的内容,您可以随时更改它。同样,根据您需要存储的内容,您可以在Application.Launching事件中恢复它,或者只在需要时读取它。

答案 3 :(得分:1)

这也是我考虑过的事情。

我已将此观点概括为此。

尽早保存。

这意味着,除了任何其他要求,促使你推迟豁免,在尽可能早的机会中拯救你。您可以直接保存到主商店,也可以专门保存到瞬态以处理墓碑。您可以在页面打开时保存在后台。当用户请求在页面之间导航时,您可以保存。

在出现意外情况的情况下,例如断电,需要用户注意的例外情况(如果被停用则没有时间),保存早期可以为用户提供更多依赖性。

可能会促使您推迟储蓄的命令可能包括

  • 根据您的体系结构,在页面级别实施保存数据可能不方便。
  • 根据要保存的数据量以及隔离存储模型的体系结构,它可能会降低性能,从而大大地尝试在页面或字段级别进行保存。