【问题标题】:Tombstonning Not Working on wp8墓碑在 wp8 上不起作用
【发布时间】:2013-12-23 16:26:00
【问题描述】:

我正在构建一个 MVVM Windows Phone 8 应用程序。

我阅读这篇文章试图解决墓碑问题:http://www.scottlogic.com/blog/2011/10/03/a-windows-phone-7-1-mango-mvvm-tombstoning-example.html

此示例在 MVVM 应用程序上实现 Tombstonning。应用程序在列表框中生成一个 twitter 提要。

我在处理旧的 twitter api 时更改了这个示例的一些代码行,但是当我运行应用程序时,关闭它或激活 Win 或 Search 按钮,然后重新启动它,页面状态不是一样的。

这是我在视图模型中进行的更改以模拟新的 Twitter 提要:

j = new List<FeedItemViewModel>();
    j.Add(new FeedItemViewModel
    {
        Author = "Auth",
        Title = "Sample1",
        Id = 1
    });


    j.Add(new FeedItemViewModel
    {
        Author = "Auth",
        Title = "Sample2",
        Id = 2
    });
    j.Add(new FeedItemViewModel
    {
        Author = "Auth",
        Title = "Sample3",
        Id = 3
    });
    j.Add(new FeedItemViewModel
    {
        Author = "Auth",
        Title = "Sample4",
        Id = 4
    });
    j.Add(new FeedItemViewModel
    {
        Author = "Auth",
        Title = "Sample5",
        Id = 5
    });
    foreach (FeedItemViewModel t in j)
    {

        this._feedItems.Add(t);

    }
    public void Update()
        {
            this._feedItems.Add(new FeedItemViewModel
            {
                Author = "_Auth",
                Title = "_Sample",
                Id = 99
            });
        }

但是当我关闭我的应用程序并重新启动它时,状态并不相同,例如滚动条位置与我离开应用程序时不同,尽管此示例中有一个方法可以记住滚动位置列表。

你知道为什么墓碑不能正常工作吗?

【问题讨论】:

  • 你是在模拟器上运行的吗?您是否在项目->属性->调试复选框'停用时的墓碑'中设置?
  • 不,我在手机上运行它

标签: c# windows-phone-8 windows-phone tombstoning


【解决方案1】:

关闭与墓碑无关。

当您按下手机上的“赢”或“搜索”按钮时,会发生墓碑/停用。您的应用程序变为非活动状态,主屏幕或搜索应用程序(或任何其他,这只是一个示例)变为活动状态。您的应用会进入休眠或墓碑状态,具体取决于许多因素。

当您按下返回时,活动应用关闭,之前活动的应用再次变为活动。这就是激活。

当激活发生时,您的应用可能会从休眠(一切都保存在内存中,应用只是暂停)或墓碑状态(系统“重新启动”应用并恢复导航堆栈和当前页面,开发人员负责恢复)恢复所有其他状态 - 变量、输入数据等)。

因此,不同之处在于墓碑应用不会将所有状态保留在内部,这是开发人员的任务。

MSDN about Windows Phone App Lifecycle上有一个很好的文档

您可以通过这篇文章了解它的工作原理 - WP7 Application Lifecycle and Tombstoning

【讨论】:

  • 对不起,我没有说得很清楚,我也按下了 WinButton 和搜索按钮,但我回到了我的应用程序,就像应用程序从头开始运行一样
  • 按照您的示例,您是否实现了 LoadViewModelFromAppState 方法来加载数据?此外,您可以调试停用和墓碑,看看 ScrollOffset 是否真的存储到这些事件的状态并从中读取?
  • 是的,我实现了这个方法,你能试着编译这段代码看看它是否有效吗?
  • 在您的示例中,不足以进行滚动偏移。我添加了更多的项目,并且在墓碑上它可以工作。确保选中此复选框scottlogic.com/blog/archive/2011/10/ForceTombstone.png 我注意到滚动位置已恢复但不完全相同。您可以尝试这种方法,但结果仍然不准确。 ItemsPanel.ScrollOwner.ScrollToVerticalOffset((double)State[ScrollOffsetKey]);
  • 确实,滚动位置已通过您的代码行恢复。但是我还想知道其他一些事情,当我重新启动我的应用程序时,会出现这个时钟图像,我该如何删除它?
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多