应用终止时未调用UWP Page.OnNavigatedFrom()。

时间:2018-11-01 20:50:40

标签: c# uwp

我已经覆盖了UWP应用中的Page.OnNavigatedFrom()方法。当我导航到另一个页面时,将调用该方法。根据{{​​3}},Page.OnNavigatedFrom()为:

  

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

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

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

更新

我感谢您的评论。更清楚地说,我应该说我是关闭该应用程序,而不是终止该应用程序。 (关闭应用程序首先会挂起,然后终止该应用程序。)我发现,即使用户关闭了该应用程序,在Frame.GetNavigationState()中对OnSuspending()的调用也会导致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();
}

1 个答案:

答案 0 :(得分:1)

  

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

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

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

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