在 Windows Phone 8.1 XAML 中检测停用和应用关闭
Posted
技术标签:
【中文标题】在 Windows Phone 8.1 XAML 中检测停用和应用关闭【英文标题】:Detecting deactivation and app close in Windows Phone 8.1 XAML 【发布时间】:2014-08-06 14:25:19 【问题描述】:出于安全原因,我需要在用户退出应用程序时注销用户,并在他们返回时显示登录屏幕。
在 Windows Phone 8 和 Windows Phone 8.1 Silverlight 中,App 类上有 Application_Deactivated
和 Application_Closing
方法(或在 Caliburn.Micro 中重写的方法 OnClose、OnDeactivate)。
唯一有趣的事件似乎是Suspend
和Resume
,但是当我使用“开始”按钮退出应用程序并使用“返回”按钮返回或从列表中启动应用程序时,它们不会被调用。
Windows Phone 8.1 XAML 有哪些替代方案?
(设置 ActivationPolicy="Replace"
可以解决一半的问题,但我想这是不可能的,因为 WMAppManifest.xml 不是 Windows Phone 8.1 XAML 项目的一部分)。
【问题讨论】:
Suspending 事件将在您离开应用程序后立即调用,但不在调试模式下。您是否在没有附加调试器的情况下对其进行了测试? 我让它在暂停中写入 ApplicationData.Current.LocalSettings 并在页面上读取,在发布模式下构建它,部署到手机,断开电缆,运行并退出。不工作 您能否重复该测试,但首先 - 重新启动手机并重新安装应用程序(在 Release 中构建,没有附加调试器)?这部分是一个建议,部分是收集关于我面临的问题的信息。谢谢。 你考虑过通用应用吗? 嗯,正如我所说,我正在测试它的工作原理 - 你能检查我的example。另请注意,在调用 Suspending 时,在调用 OnNavigatedFrom 之前,但是当您 Resume 时,不调用 OnNavigatedTo。 【参考方案1】:Suspending 事件将在您离开应用程序后立即调用,但不在调试模式下。我在 Suspending 事件时构建了一个simple app modyfing LocalSettings,然后在 Resuming 时获取信息。
您可能知道,但为了回答的完整性 - 一些评论:
Suspending 事件之前,OnNavigatedFrom 事件被调用,但是当你Resume 时,OnNavigatedTo 被调用没有调用 - reference:
注意在 Windows Phone 上,应用程序暂停时会调用 OnNavigatedFrom()。应用恢复时不会调用 OnNavigatedTo()。
要使用调试器测试暂停/恢复,请在调试位置选项卡中使用生命周期事件 - more info
引用Application lifecycle in Windows Runtime apps
【讨论】:
在 OnNavigatedFrom 中是否知道应用程序是否因为被暂停而从该页面导航?我有更新 UI 的事件处理程序,如果我只是暂停应用程序,我不希望它们取消订阅。 @MattyMerrix 我认为你应该能够通过解析 NavigationEventArgs - 当应用程序被暂停时(当然你有一个注册的框架,使用 SuspensionManager 等等),然后应该使用 Firward 导航调用 NavigatedFrom 事件,尝试调试,您应该能够决定何时暂停。但我不认为做你想做的事是个好主意 - 请记住暂停的应用程序可以终止,您应该在暂停/恢复时订阅/取消订阅,记住暂停的应用程序不在后台运行。 if (e.Uri.ToString() != "app://external/") UnSubscribeFromEvents(); 这很好用,当您被暂停时,您会看到 NavigationEventArgs Uri 属性包含 app://external/,其他任何时候它也包含您要访问的页面的完整 uri 字符串!这正是我想要的。我了解该应用程序无法终止,我不确定您描述的问题是什么? @MattyMerrix 感谢您提供的信息。至于问题 - 当您离开时,操作系统可能会在几秒钟内暂停应用程序,它将驻留在内存中并可以快速恢复,但在某些情况下,特别是如果手机资源不足,您的应用程序可能会被终止操作系统,您对此无能为力。所以你必须为这种情况做好准备。以上是关于在 Windows Phone 8.1 XAML 中检测停用和应用关闭的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows Phone 8.1 XAML 中检测停用和应用关闭
如何在 Windows Phone 8.1 XAML (RT) 应用程序中显示 admob 广告?
为 Windows Phone 8.1 XAML 应用程序显示的奇怪版本