我正在构建一个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或搜索按钮,然后重新启动它时,页面状态不是同样的。
以下是我在视图模型中更改以模拟新的Twitter Feed:
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
});
}
但是当我关闭我的应用程序并重新启动它时,状态是不一样的,例如滚动器位置与我离开应用程序时的位置不同,尽管此示例中有一个方法可以记住滚动位置清单。
你知道为什么墓碑不能正常工作吗?
答案 0 :(得分:1)
关闭与墓碑无关。
当您按手机上的“赢”或“搜索”按钮时,会发生墓碑/停用。您的应用程序变为非活动状态,主屏幕或搜索应用程序(或任何其他,这只是一个示例)变为活动状态。您的应用程序会进入休眠或逻辑删除状态,具体取决于许多内容。
当您按下时,活动应用关闭,先前活动的应用再次变为活动状态。这叫做激活。
当激活发生时,您的应用程序可能会从休眠状态恢复(一切都保存在内存中,应用程序只是暂停状态)或从逻辑删除状态(系统“重新启动”应用程序并恢复导航堆栈和当前页面,开发人员负责恢复所有其他状态 - 变量,输入数据等)。
所以,不同之处在于,逻辑删除的应用程序不能保持所有状态,这是开发人员的任务。
MSDN about Windows Phone App Lifecycle
上有一份很好的文件您可以使用本文与示例 - WP7 Application Lifecycle and Tombstoning
了解其工作原理