2014-08-27 131 views
2

所以我遇到了一些奇怪的行为。挂起时应用程序崩溃

我是带有ViewModel的第一页。 ViewModel只包含一个ObservableCollection。 当我在第二页导航时,一切似乎都很好。但是,当我暂停该页面上的应用程序时,该应用程序崩溃。长按后退按钮或Windows键。 奇怪的是,这只发生在我没有调试时。当我调试一切作品时发现。挂起 - 恢复完美。

我可以在我的Lumia 920和模拟器上重现它。

我有点发现造成这种行为的原因,但实际上它应该是一个原因。

当我导航离开,我调用此方法

Frame.Navigate(typeof(SecondPage), FirstPageViewModel); //names are fictive 

怪异行为的原因是的ObservableCollection。如果我只传递一个字符串对象就没问题。如果我创建一个本地列表并通过它,它会在暂停时崩溃。

我在想,我无法传递一个List对象,虽然没有任何意义。 为什么它不会在调试器中发生。是否有可能在某个地方耗尽内存?

回答

3

该问题不涉及调试模式,因为在调试时,the Suspending event is not raised,所以你的应用程序工作正常。

为了更好地看到发生了什么,请手动调用暂停事件(请参阅上面链接中的答案)。然后,您将能够在调试模式下看到引发异常(及其类型)的位置。

我不能说什么exacly导致问题(没有看到的代码),但您提供一个线,可能会很麻烦:

Frame.Navigate(typeof(SecondPage), FirstPageViewModel); 

这里,您导航和传递一个对象,所以大概的地方,你retrive它。看,当你恢复你的应用程序,页面被恢复,但你的对象通常不是。你将不得不使用一些NavigationHelper的方法 - SaveState/LoadState保存/加载您传递的数据或自己处理。

+0

感谢帮助了我很多 认为按Windows键在仿真器中暂停 – 2014-09-04 19:28:53

1

如果您使用内建SuspensionManager类,则只能将“简单”类型(字符串,字符,数字,GUID)作为第二个参数传递给Frame.Navigate()。请参阅documentation for Frame.Navigate了解更多信息。

+0

是的,谢谢,他们应该减少它到字符串虽然 它说对象,但只涵盖基本对象 – 2014-09-04 19:28:02