我正在从Windows Phone 8迁移到Windows Phone 8.1。
我创建了一个Windows Phone 8.1商店应用程序,Hub App。
应用程序创建了OnNavigatedTo和OnNavigatedFrom方法
protected override void OnNavigatedTo( NavigationEventArgs e )
{
this.navigationHelper.OnNavigatedTo( e );
}
protected override void OnNavigatedFrom( NavigationEventArgs e )
{
this.navigationHelper.OnNavigatedFrom( e );
}
我在OnNavigatedFrom中放置了一个断点并尝试关闭应用程序,或者离开应用程序并且没有命中断点,即应用程序没有到达OnNavigatedFrom。
Windows Phone 8应用程序正在破坏OnNavigatedFrom。 WP 8.1的机制是否不同?如果是这样的话?
感谢。
答案 0 :(得分:3)
问题似乎发生了,因为您正在 Debug 模式(VS附加)中运行。在这种情况下,您的程序在导航/暂停事件的情况下行为略有不同,要正确测试它,您必须手动调用Suspending事件(Lifecyce events dropdown)。在正常情况下,在您离开应用程序后,将立即调用这两个事件( OnNavigatedFrom 和 Suspending )。
要测试它,我们可以在 OnNavigatedFrom 中添加一些东西(基于 Hub App 从Windows应用商店模板中):
protected async override void OnNavigatedFrom(NavigationEventArgs e)
{
Debug.WriteLine("OnNavigatedFrom");
Hub.Background = new SolidColorBrush(Colors.Red);
this.navigationHelper.OnNavigatedFrom(e);
}
在这种情况下,当您运行不附带Visual Studio的应用程序时,当您返回应用程序时,背景应为红色 - 这意味着该事件已被触发。
事实上,当转向WP8.1 WinRT时,还有一个巨大的(IMO)差异 - OnNavigatedTo won't be fired when you come back from suspension:
注意在Windows Phone上,应用程序暂停时会调用OnNavigatedFrom()。恢复应用程序时不会调用OnNavigatedTo()。
只有在您导航时才会调用它。
更多参考文献:Navigating between pages,Lifecycle,Launching, resuming, and multitasking和Guidelines for app suspend and resume。