我的Windows Store App启动时遇到问题。当我使用“关闭应用程序手势”(从上到下滑动应用程序)然后再次快速启动应用程序时,有时会出现一个空白的黑屏,当我点击它时,会出现“开始”菜单,并且“ MoAppHang“事件被记录。
我的App_Launched事件代码在这里:
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated )
{
// Restore the saved session state only when appropriate
await SuspensionManager.RestoreAsync();
}
// Do not repeat app initialization when already running, just ensure that
// the window is active
if (args.PreviousExecutionState == ApplicationExecutionState.Running)
{
if (!string.IsNullOrEmpty(args.Arguments))
{
Frame f = Window.Current.Content as Frame;
if (f != null)
{
UseSecondaryTileNavigation(f, args.Arguments);
}
}
Window.Current.Activate();
return;
}
Frame rootFrame;
if (Window.Current.Content == null)
{
// Create a Frame to act as the navigation context and associate it with
// a SuspensionManager key
rootFrame = new Frame();
SuspensionManager.RegisterFrame(rootFrame, "AppFrame");
}
else
{
rootFrame = (Frame)Window.Current.Content;
}
if (!await DatabaseHelper.ExistsDatabase())
{
await DatabaseHelper.CreateDatabase();
}
if (rootFrame.Content == null)
{
// When the navigation stack isn't restored navigate to the first page,
// configuring the new page by passing required information as a navigation
// parameter
if (!rootFrame.Navigate(typeof(ItemsPage), "AllGroups"))
{
throw new Exception("Failed to create initial page");
}
}
if (!string.IsNullOrEmpty(args.Arguments))
{
UseSecondaryTileNavigation(rootFrame, args.Arguments);
}
// Place the frame in the current Window and ensure that it is active
if (Window.Current.Content == null)
{
Window.Current.Content = rootFrame;
}
Window.Current.Activate();
当用户使用辅助磁贴打开应用时,UseSecondaryTileNavigation会执行导航(它基本上使用Frame参数并使用Frame.Navigate将其导航到正确的位置)。
我哪里错了?
谢谢大家!
答案 0 :(得分:0)
看起来你可能在你的启动处理程序中做了一些耗时的工作。我提出的第一个建议是使用自定义闪屏技术。也就是说,在OnLaunched
处理程序中尝试设置Window.Current.Content
并激活窗口并尽快退出该方法。您可以将Window.Current.Content
设置为仅显示加载进度条的页面 - 并在那里处理您的实际加载逻辑。
接下来要看的是 - 当应用程序在暂停时启动时会发生什么? (你有一个暂停处理程序吗?)你的应用程序可以处理在上一次暂停/关闭完成之前(重新)启动的情况吗?
我注意到应用程序完全关闭之前通常需要几秒钟(即使您使用向下拖动手势关闭它)。