2

J. Likness 在“使用 C# 和 XAML 构建 Windows 8 应用程序”的第 166 页上谈到 OnResuming 事件时表示:“ [此事件] 的主要原因是应用程序提供及时数据以刷新其信息。

我的应用中有一个页面包含此类数据;因此,如果用户已恢复应用程序,并且他显式返回或隐式/自动返回到该页面(假设应用程序暂停时他在该页面上),我想刷新数据。但是我怎么知道我的应用程序被暂停/恢复了?

我的想法是设置一个布尔值,数据丰富的页面可以在其 OnNavigatedTo() 事件中询问;如果是真的,我会刷新数据。有没有更好的方法来做到这一点,也许更重要的是:如果用户在该页面上,应用程序被暂停然后恢复,是否会触发 OnNavigatedTo() 事件?或者应用程序是否将页面视为从未离开过,因此它没有被导航回?也许另一个页面级事件会更合适?

4

1 回答 1

1

我想说您需要确定何时需要刷新感兴趣的页面的阈值;我认为它不像布尔值那么简单。用户可以暂停并几乎立即恢复(例如在 15 秒内),这可能不值得刷新,但同一用户也可以在辅助页面上徘徊,从不暂停,并在 30 分钟后返回页面,在这种情况下页面数据可能非常陈旧。您的布尔值可能需要更多的时间戳。

也就是说, Resuming 事件不会触发OnNavigatedTo。如果您需要知道要返回的页面,则需要在暂停时保存该信息,也许在LocalSettings中。但是现在考虑一下,如果您在 C#/XAML 中使用SuspensionManager,这已经代表您发生了,并且如果您考虑一下,您想要的行为与应用程序时应该发生的行为并没有太大的不同(如果有的话)从终止状态返回。

所以以类似的方式,你可以添加一个电话

await SuspensionManager.RestoreAsync()

作为您对 Resuming 事件的实现。反过来,这将导致OnNavigatedTo并且您将运行启动该页面的正常逻辑。

从技术上讲,它不再恢复,您只是使用恢复事件来触发整个页面的重新加载。根据页面的性质,这可能有点过头了(例如,可能有很多半静态数据而只有极少的易失性数据——恢复不需要恢复静态数据)。您可能想要回拨在“恢复”和“终止”上刷新了多少,但由于 SuspensionManager 是您可以查看和更改的代码,因此您可以控制该粒度级别。也许在这里您介绍了您对布尔值的想法,以区分在通过 Resuming 调用时需要在 LoadStateAsync 中完成的操作与通过其他方式调用时需要完成的操作。

于 2012-12-19T06:18:54.147 回答