[题]
在Windows Phone 8.1,什么当用户离开应用程序和OnSuspended事件触发之间的时间中到底发生了? 我有与该跨度来管理对象的能力,特别是MediaCpture对象的麻烦。
为了更好地说明问题,这里的情景:
- 用户与视频预览页面上被泵送至CaptureElement
- 用户点击开始按钮
- 用户点击返回按钮,返回到该页面与一个破碎MediaCapture
随着WinRT的没有一个ObscuredEvent和OnNavigatingFrom不火,除非你在同一帧转到另一个页面。 经过一番调查,我发现,触发该事件仅是Window.Current.VisibilityChanged
我已经先行一步,并把它挂在页面NavigatedTo和OnNavigatedFrom脱钩(见下文EX2)。 事件里面,我检查参数告知用户,如果应用程序被隐藏或显示和配置/初始化相应的(见下文实施例1,)。
[问题]
然而,这仅适用于连接调试器。 如果我这样做没有附加调试器,它不会重新初始化和频繁死机的相机 ,我不得不从字面上重新启动设备。
代码示例1(注:返回时e.Visible ==虚假离开应用程序和真)
async void Current_VisibilityChanged(object sender, VisibilityChangedEventArgs e)
{
if (!e.Visible) //means leaving the app
{
await DisposeAll(); //cleans the MediaCapture and CaptureElement
}
else
{
if(mediaCaptureManager != null) await DisposeAll();
await Initialization(); //set up camera again
}
}
实施例2(钩入的情况下)
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Window.Current.VisibilityChanged += Current_VisibilityChanged;
this.navigationHelper.OnNavigatedTo(e);
}
protected async override void OnNavigatedFrom(NavigationEventArgs e)
{
Window.Current.VisibilityChanged -= Current_VisibilityChanged;
this.navigationHelper.OnNavigatedFrom(e);
}
[更新:分辨率]
除了使用VisibilityChanged的,勾入Window.Current.Activated页面的构造。 与调试器完全不沾边,激活的活动将提供在WindowActivatedEventArgs的WindowActivationState参数。 像这样:
private async void CurrentOnActivated(object sender, WindowActivatedEventArgs e)
{
if(e.WindowActivationState == CoreWindowActivationState.Deactivated)
{
//dispose MediaCapture here
}
else if(e.WindowActivationState == CoreWindowActivationState.CodeActivated || e.WindowActivationState == CoreWindowActivationState.PointerActivated)
{
//initialize MediaCapture here
}
}