【发布时间】:2015-03-30 15:59:55
【问题描述】:
我在管理应用的生命周期时遇到了问题,因为我不确定与页面/应用生命周期相关的事件和函数的确切运行时间。如果微软在某个地方把它全部列出来就好了。具体来说,以下是我认为我所知道的以及我不知道的关于以下每个事件/函数的行为:
Page.Page()(构造函数):第一次创建页面时运行。不确定它是在应用程序运行时只运行一次,还是每次我在单个会话中导航到页面时。
Page.OnNavigatedTo():在页面创建时以及每次导航到时运行。
Page.OnNavigatedFrom():当用户离开页面时运行。当用户在页面显示时按下开始按钮或锁定屏幕按钮时不会运行。
App.App()(构造函数):应用启动时只运行一次。
App.Resuming:当应用程序在最小化/暂停后进入视图时触发,或者当用户解锁屏幕并且应用程序进入视图时触发。首次启动应用时不运行。
App.Suspending:当用户按下主页上的后退按钮(即应用程序不再在视图中)以及按下开始按钮时触发。
我遗漏了什么或做错了什么?我试图确定的原因是我的应用程序有一个运行后台音频播放器的页面,而这又需要一个精心管理的事件订阅/取消订阅系统,如果我在该页面上点击开始按钮,它通常会表现得很尴尬.另一个问题是我的 App.xaml.cs 中有一个静态对象,我在整个应用程序中使用它并且公开了一些事件。现在我正在订阅/取消订阅每个页面上的事件,如下所示:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
App.globalObject.Event1 += Event1_handler;
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
App.globalObject.Event1 -= Event1_handler;
}
但我不确定这是否是正确的方法(显然我试图确保我只订阅一次事件以避免事件处理程序运行多次)。我应该只在页面的构造函数中订阅一次事件吗?
编辑:我正在使用包含SuspensionManager 和NavigationHelper 类的项目模板,以防万一发生任何变化。
【问题讨论】:
-
页面构造函数可能会或可能不会运行多次,具体取决于为该页面设置的缓存模式。
-
如果我将缓存设置为必需,如何确保事件处理程序只附加一次?我已经尝试了几乎所有可能的组合,但我仍然收到重复的附件。
-
您可以在订阅前取消订阅。类似于:App.globalObject.Event1 -= Event1_handler; App.globalObject.Event1 += Event1_handler;
标签: c# events windows-phone-8.1 page-lifecycle