【问题标题】:UWP Page.OnNavigatedFrom() not called when app is terminated应用程序终止时未调用 UWP Page.OnNavigatedFrom()
【发布时间】:2018-11-03 00:38:12
【问题描述】:

我在 UWP 应用中覆盖了 Page.OnNavigatedFrom() 方法。当我导航到另一个页面时调用该方法。根据documentationPage.OnNavigatedFrom()是:

页面卸载后立即调用,不再是 父框架的当前来源。

但是,当我终止应用程序时,不会调用页面的 OnNavigatedFrom()。不应该终止应用卸载页面吗?

// Not called when app is terminated
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   base.OnNavigatedFrom(e);
} 

更新

感谢 cmets。更清楚地说,我应该说我是关闭应用程序,而不是终止应用程序。 (关闭应用程序首先挂起然后终止应用程序。)我发现在OnSuspending() 中调用Frame.GetNavigationState() 会导致即使用户关闭应用程序也会调用OnNavigatedFrom()

private void OnSuspending(object sender, SuspendingEventArgs e)
{
    var deferral = e.SuspendingOperation.GetDeferral();
    //TODO: Save application state and stop any background activity

    // Triggers currently loaded Page's OnNavigatedFrom
    Frame frame = Window.Current.Content as Frame;
    ApplicationData.Current.LocalSettings.Values["NavigationState"] =
        frame.GetNavigationState();

    deferral.Complete();
}

【问题讨论】:

  • OnNavigatedFrom 将在您关闭应用程序时调用。您能否分享更多显示您的导航逻辑的代码。
  • 您不能终止 UWP 应用,只能暂停它。 docs.microsoft.com/en-us/windows/uwp/launch-resume/…
  • 应用程序在页面是当前页面时终止。它从未被卸载。用户从未离开过它。如果需要,您可以将页面保存为暂停状态。

标签: c# uwp


【解决方案1】:

页面卸载后立即调用,不再是父框架的当前源

我认为您误解了该文件。 OnNavigatedFrom() 方法将在页面卸载时调用不再是当前框架来源。它是页面生命周期,仅在导航堆栈的场景中可用。

但是,终止是app life cycle 的概念。并且其优先级高于页面生命周期。

当你终止 uwp 应用程序时,OnSuspending 事件处理程序将被调用,如果你想保存页面数据,你可以在页面类中订阅这个事件。

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2019-05-26
    • 1970-01-01
    • 2012-04-29
    • 2012-09-15
    • 1970-01-01
    相关资源
    最近更新 更多