【问题标题】:When to save the state of the application for tombstoning?何时保存应用程序的状态以进行墓碑化?
【发布时间】:2011-01-07 10:33:23
【问题描述】:

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

我看到了两种可能性:

  1. 每次从页面导航时保存每个页面的状态(它是视图模型),以便在应用程序在墓碑过程中终止并重新激活时已经保存
  2. 在应用程序停用事件中,遍历导航堆栈中的所有页面并保存它们的状态(它们的视图模型),然后在应用程序激活事件中重新注入。

正确的处理方法是什么?

谢谢 西蒙娜

【问题讨论】:

    标签: windows-phone-7 tombstoning


    【解决方案1】:

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

    This article 还通过应用程序生命周期和墓碑的示例给出了一个不错的解释,区分了退出/关闭、停用和墓碑。

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

    【讨论】:

      【解决方案2】:

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

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

      我保留的页面特定信息示例包括:已输入但未保存的数据;和滚动位置。

      【讨论】:

        【解决方案3】:

        我不能投票赞成上一个答案,因为我没有足够的“声誉”,但是任何瞬态信息都应该保留在 Application.Deactivated 事件中,然后在 Application.Activated 事件中恢复以支持墓碑.

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

        【讨论】:

          【解决方案4】:

          这也是我考虑过的。

          我已经概括了我对它的看法。

          尽早保存。

          这意味着,在没有任何其他要求会促使您推迟保存的情况下,请尽早进行保存。您可以直接保存到您的主存储,或者您可以保存到专门用于处理墓碑的瞬态状态。您可以在页面打开时在后台保存。当用户请求在页面之间导航时,您可以保存。

          在可能发生意外情况的情况下,例如断电、需要用户注意的异常(注意如果被停用则没有时间),提早保存可以为用户提供更多的可靠性。

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

          • 根据您的架构,在页面级别实现数据保存可能不方便。
          • 根据要保存的数据量和隔离存储模型的架构,它可能会大大降低尝试在页面或字段级别保存的性能。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多