我已经覆盖了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();
}
答案 0 :(得分:1)
页面卸载后立即调用,并且不再是父框架的当前来源
我认为您误解了该文档。当页面卸载时,将调用OnNavigatedFrom()
方法,该方法不再是当前的框架来源。它是页面生命周期,仅在导航堆栈的情况下可用。
但是,终止是app life cycle的概念。并且其优先级高于页面生命周期。
终止uwp应用程序时,将调用OnSuspending
事件处理程序,如果要保存页面数据,可以在页面类中订阅此事件。