2012-07-19 271 views
0

我在启动Windows应用商店应用时遇到问题。当我使用“关闭应用程序手势”(从上到下滑动应用程序),然后再次以非常快的速度启动应用程序时,有时会出现空白的黑屏,当我点击它时,会出现“开始”菜单, MoAppHang“事件已记录。Windows应用商店应用启动

我App_Launched事件代码是在这里:当用户使用辅助瓦片(它基本上使用帧参数并将其导航到使用Frame.Navigate正确的位置)打开应用

 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执行导航。

我哪里错了?

谢谢大家!

回答

0

看起来你可能会在启动处理程序中做一些耗时的工作。我会做的第一个建议是使用自定义启动画面技术。也就是说,在您的OnLaunched处理程序中,尝试设置Window.Current.Content并激活窗口并尽快离开该方法。您可以将Window.Current.Content设置为仅显示加载进度条的页面 - 并在那里处理您的实际加载逻辑。

接下来要看的是 - 当您的应用程序在它仍然处于暂停状态时启动时会发生什么? (您是否有暂停处理程序?)当您的应用程序在之前的暂停/关闭完成之前(重新)启动时,您的应用程序可以处理该情况吗?

我注意到它通常在应用程序完全关闭之前需要几秒钟的时间(即使您使用向下拖动手势关闭它)。