如何在挂起和恢复后重新初始化 Windows phone 应用页面 (Prism.StoreApps)

How to re-initialize a Windows phone app page after suspend and resume (Prism.StoreApps)

我有一个 (Prism.StoreApps) 应用程序,其页面必须在页面导航离开时释放已使用的对象(在 OnNavigatedFrom 中)。当应用程序被暂停时也会发生这种情况(因为 OnNavigatedFrom 被调用)。当应用程序恢复时,必须重新初始化该对象。据我所知,当应用程序恢复并且页面进入前台时没有引发页面事件。我知道应用程序的 Suspending 事件。问题是这不能使用,因为重新初始化页面上的对象涉及该页面上的 UI 元素。

问题是如何通知页面由于简历而必须重新初始化。

澄清一下:页面上的对象是 MediaCapture。它必须设置为 CaptureElement 的来源。 StartPreviewAsync 必须调用以将媒体流显示为预览。这是初始化的部分。离开时至少必须调用 StopPreviewAsync 以允许其他应用程序使用相机。在包含 MediaCaptureCaptureElement 的页面上恢复应用程序后,至少必须再次调用 StartPreviewAsync。这不能在应用程序的 Resuming 事件中完成,因为页面出于未知原因(假设 MediaCaptureCaptureElement 被引用为 App 实例的属性)。该应用程序在恢复时崩溃(没有任何错误信息)。

Windows Phone RT 8.1 和 Windows 8.1 在应用程序生命周期中的 suspend/resume 表现相同。 MSDN 上有一篇关于处理 application lifecycle with Prism 的精彩文章 link。简而言之,您需要处理 2 个重要案例:

  • 应用程序在挂起后被终止。重新打开应用程序时,您将收到一个 OnLaunched 事件,Prism 将处理恢复状态、创建框架并启动导航。默认情况下应该正确处理这种情况。
  • 要覆盖 suspend/resume 而不会终止,您必须为 Resuming 事件注册一个事件处理程序。就个人而言,我会通过 EventAggregator 发送一条消息来通知您的 view/view 模型。如有必要,在消息的接收端添加一个小的延迟。