【问题标题】:App crashes when home, search or back button are pressed WinPhone RT按下主页、搜索或返回按钮时应用程序崩溃 WinPhone RT
【发布时间】:2016-04-19 20:41:05
【问题描述】:

我正在开发条形码扫描仪,我的 MainPage 有一个全屏 CaptureElement。我还有两个导航到的页面:HystoricalPage 和 AboutPage。为了在我从 MainPage 导航到其他页面之一时停止异步,我在 OnNavigatedFrom 中使用了Dispose(); 方法。像这样:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
     _mediaCapture.Dispose();
}

有了这个,我在页面之间导航就好了,有时当我回到可能的 MainPage 时,CaptureElement 不会重新初始化,但这不是我现在的问题。我的问题如下:

当我在我的一个页面中并按下主页按钮并返回我的应用程序后;按下搜索按钮,然后回到我的应用程序;当我按住后退按钮并回到我的应用程序后。在所有这些情况下,我的应用程序都会崩溃。我读到它可能会使用恢复和暂停事件来修复,但我不知道如何将这些事件添加到我的应用程序中。如果有人可以帮助我,我会很感激。谢谢!

【问题讨论】:

  • 为什么您的应用会崩溃?在调试中启用通用运行时语言异常中断 -> 异常
  • 当您调试您的应用程序时,它不会被 Suspended 并且因此 OnNavigatedFrom 不会被触发(通过 NavigationHelper)(顺便说一句:可能还有其他在发布模式下运行时出现异常并暂停)。我认为您应该在以下帖子中寻求帮助:onetwothreeapp-lifeccyle

标签: c# windows-phone-8.1 runtime


【解决方案1】:

按下开始按钮时,我在使用相机应用时遇到了类似的问题。我解决它的方法是:

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
    App.Current.Resuming -= App_resuming;
    App.Current.Suspending -= App_suspending;
    _mediaCapture.Dispose();
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    App.Current.Resuming += App_resuming;
    App.Current.Suspending += App_suspending;
}

private void App_suspending(object sender, SuspendingEventArgs args)
{
    _mediaCapture.Dispose();
}

private void App_resuming(object sender, object e)
{
    //reinitialize _mediaCapture object
}

正如上面 romasz 所说,即使您可以在调试时使用生命周期事件暂停和恢复,您也无法在调试模式下准确地测试它,我发现某些类(例如 @987654323 @) 的行为方式很奇怪,因此最好通过部署来测试应用程序。

【讨论】:

  • 测试挂起的最佳方法(除了发布模式的最终测试)是在debug mode manually 中测试它。此外,正如 Rob Caplan 在他的回答中提到的,最好订阅 Window's 事件 - 在某些情况下不会触发暂停。
  • 就像我说的,有时即使这样也不能正常工作。当我使用BackgroundMediaPlayer 时,手动挂起应用程序会导致后台媒体播放器任务也被取消,这在发布模式下不会(也不应该)发生。不过,在测试我的相机应用程序时它工作得很好。
【解决方案2】:

导航事件仅在应用本身导航时触发。当用户通过按下 windows 键退出应用程序时,它们不会触发。要处理这种情况,您可以在 WindowActivationState 停用时在 CoreWindow.Activated 事件中处理 MediaCapture。

【讨论】:

  • 只是一个备注 - OnNavigatedFrom 将在用户使用 windows 键切换时调用 - 如果 OP 使用了 Frame.GetNavigationState 方法(即SuspensionManager 模板使用)。还必须注意 CoreWindow.Activated 事件,因为它也会被触发,例如当 MessageDialog 出现时。
【解决方案3】:

我也遇到了这些问题,并设法通过在媒体捕获上使用 .dispose 来解决它。请在此处查看我的 cmets 以获取更多信息:https://github.com/phonegap/phonegap-plugin-barcodescanner/issues/166

【讨论】:

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