繁体   English   中英

Windows Phone 8.1运行时中的页面和应用程序事件行为

[英]Page and App events behavior in Windows Phone 8.1 Runtime

我无法管理应用程序的生命周期,因为我不确定与页面/应用程序生命周期相关的事件和功能何时运行。 如果Microsoft在某个地方将它们全部制表,那将是很好的。 具体来说,以下是我认为和不知道的以下每个事件/功能的行为:

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;
}

但是我不确定这是否是正确的方法(显然,我试图确保只预订一次事件,以避免事件处理程序多次运行)。 我应该只在页面的构造函数中订阅一次该事件吗?

编辑:我正在使用包含SuspensionManagerNavigationHelper类的项目模板,以防万一。

您的代码和逻辑对我来说似乎还可以,但是正如igrali在注释中所建议的那样,您始终可以在订阅前“清除”处理程序。 这有点hacky,但可以完成工作

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    App.globalObject.Event1 -= Event1_handler;
    App.globalObject.Event1 += Event1_handler;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM