如何在Windows应用商店应用中保存我的状态?

时间:2013-03-28 20:02:48

标签: c# windows-8 windows-runtime winrt-xaml state

将状态保存到localsettings时遇到了一些问题。一切都没问题,除非有人使用 alt + f4 关闭我的应用程序并在10秒之前打开它(在应用程序处于暂停状态并保存数据10秒后) 。 (技术xaml / c#)

我在事件OnSuspending中保存了数据。

我在事件OnLaunched中加载我的数据,如下所示:

if (args.PreviousExecutionState == ApplicationExecutionState.Terminated ||
args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
{
  // save data
}

如何处理这种情况?我知道我可以在每次更改时保存我的状态,但我认为在我的应用程序中这不是一个好主意。 谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

当您在10秒钟之前关闭并启动应用程序时,会创建另一个实例并且前一个实例不会运行OnSuspending事件(这很奇怪,因为这意味着此事件之类的异步操作可以在没有警告我们的情况下结束或永远不会开始)。我认为这很烦人,但为什么你的用户会这样做呢?大多数情况下,用户“重新启动”您的应用程序,因为它崩溃或者卡住了,无法返回主页面。您应该尝试阻止这些情况,并且很少会发生这样的想法。

然而,这也可能发生,因为用户忘记做某事并想再次启动应用程序。为防止丢失用户数据,我会在有机会时保存最重要的数据,并仅保留其余的OnSuspending方法。 您需要考虑哪些数据会在丢失时扰乱您的用户。

我认为微软应该有更好的方法来保存应用程序状态。我搜索了很多关于这个问题并且没有找到解释所以现在我将继续做我上面所说的。我希望你提出的这个问题可以帮助我澄清一下,在我看来,这是一个奇怪的案例。

答案 1 :(得分:0)

onLaunched :
    CoreWindow.GetForCurrentThread().Activated += App_Activated;
and event:  
void App_Activated(CoreWindow sender, WindowActivatedEventArgs args)
        {



               if (args.WindowActivationState == CoreWindowActivationState.Deactivated)
               {
               //save Data
               }
       }

加载数据时,请删除: if (args.PreviousExecutionState == ApplicationExecutionState.Terminated || args.PreviousExecutionState == ApplicationExecutionState.Closed ByUser)`。 它有效!