【问题标题】:App crashes when on Suspend应用程序在挂起时崩溃
【发布时间】:2014-10-21 08:50:23
【问题描述】:

所以我遇到了一些奇怪的行为。

我是第一个使用 ViewModel 的页面。 ViewModel 只包含一个 ObservableCollection。 当我在第二页上导航时,一切似乎都很好。但是当我在这个页面上暂停应用程序时,应用程序崩溃了。长按返回按钮或 Windows 键。 奇怪的是,这只发生在我不调试时。当我调试时,一切正常。 Suspend-Resume 完美运行。

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

我找到了导致这种行为的原因,但实际上它应该是一个原因。

当我离开时,我正在调用这个方法

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

奇怪行为的原因是 ObservableCollection。如果我只是传递一个字符串对象就可以了。如果我创建一个本地列表并传递它,它会在暂停时崩溃。

我在想,我无法传递 List 对象,但这没有任何意义。 为什么它不会在调试器中发生。有没有可能我在某个地方内存不足?

【问题讨论】:

    标签: c# windows-phone windows-phone-8.1


    【解决方案1】:

    该问题与调试模式无关,因为在调试时,the Suspending event is not raised,所以您的应用程序运行良好。

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

    我不能说到底是什么导致了这个问题(没有看到代码),但你提供了一行可能很麻烦:

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

    您在此处导航并传递一个对象,因此您可能在某个地方检索它。看,当您恢复应用程序时,页面已恢复,但您的对象通常不会。您将不得不使用一些 NavigationHelper 的 方法 - SaveState/LoadState 来保存/加载您传递的数据或自行处理。

    【讨论】:

    • 谢谢帮了我很多,我认为按下 Windows 键也会在模拟器中暂停
    【解决方案2】:

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

    【讨论】:

    • 是的,谢谢,尽管它说对象,但他们应该将其简化为字符串,但仅涵盖基本对象
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多