UWP/WinRT:如何保存然后恢复简单的文本框以从终止状态恢复?

2023-12-26

In 这个文件 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/mt243287.aspx在描述 Windows 10 UWP 应用程序的生命周期时,它指出:

用户现在希望您的应用程序在设备上执行多任务时能够记住其状态。例如,他们希望页面滚动到相同的位置,并且所有控件都处于与以前相同的状态。通过了解启动、挂起和恢复的应用程序生命周期,您可以提供这种无缝行为。

然而,似乎没有太多关于如何实现这一目标的文档。我认为所有内容都是由应用程序开发人员手动保存的,然后在恢复时使用应用程序挂起时隐藏的任​​何数据从头开始重新创建,所有这些都是为了造成应用程序的确切内存状态从未改变的错觉。

我试图仅使用一个最小的示例(一个仅包含 TextBox 的 XAML 页面)来解决这个问题。但即使在这种情况下,我还是有点难以理解如何实现目标。我将提供更一般的想法,但我的具体问题只是如何保存然后恢复一个简单的文本框以从终止状态恢复?我正在使用 C++/CX 工作,但会寻求我能得到的任何帮助。

到目前为止,我对此的想法如下:

  • At minimum, obviously the text of the TextBox has to be saved.
    • 这可以保存到ApplicationData::Current->LocalSettings.
    • 我立即看到的一个问题是,我上面引用的有关生命周期的文档指出,应用程序必须在挂起信号或面临终止后的 5 秒内完成保存。文本框可能会保存大量数据,导致在繁忙的 IO 情况下可能会导致保存被切断,特别是如果我们开始扩展到微不足道的单个 TextBox 情况之外。
    • 幸运的是,该文档指出,“我们建议您为此目的使用应用程序数据 API,因为它们保证在应用程序进入挂起状态之前完成。有关详细信息,请参阅使用 UWP 应用程序访问应用程序数据。”不幸的是,当您点击该链接时,没有任何相关内容提供更多详细信息,而且我在 API 中找不到任何记录此行为的内容。通过保存到ApplicationData::Current->LocalSettings我们是否不会因为数据损坏或丢失而被切断电源?
  • Once the minimum has been taken care of, next we'll probably need extras like cursor and window position.
    • 我们可以通过以下方式获取光标位置TextBox->SelectionStart据我所知,返回当前光标位置的用法在 API 中没有记录。这似乎也很适合存储为int into ApplicationData::Current->LocalSettings.
    • 我们如何获取、保存和恢复TextBox窗口的滚动位置?
  • 现在我们已经有了额外的东西,那么困难的东西怎么样,比如撤消历史记录?我假设这是不可能的我在 Stackoverflow 上的问题 https://stackoverflow.com/questions/31886766/uwp-winrt-how-to-enable-undo-hooks-on-a-textbox关于如何访问文本框的撤消功能尚未得到答案。尽管如此,如果他们切换到另一个应用程序,然后回来认为由于我们实现了完美且无缝的终止恢复,该应用程序从未关闭,并且他们的撤消历史记录已被清除,那么用户体验确实很差。
  • 是否还需要为文本框保存其他内容才能创建理想的用户体验?我错过了什么还是有更简单的方法来完成这一切?像 Microsoft 的 Edge 浏览器这样的东西如何处理复杂的情况,其中有数十个选项卡、表单输入、滚动位置等都需要在 5 秒内保存?

The 应用程序生命周期 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/mt243287.aspx您引用的文档已针对 Windows 10 进行了更新,但似乎丢失了您想知道的一些重要内容。

我发现了一篇旧博文,管理应用程序生命周期,让您的应用程序感觉“永远活着” http://blogs.msdn.com/b/windowsappdev/archive/2012/04/10/managing-app-lifecycle-so-your-apps-feel-quot-always-alive-quot.aspx,这似乎是您链接的灵感。

在博客文章的最后,有一段内容如下:

在正确的时间保存正确的数据

在应用程序的整个生命周期中始终增量保存重要数据。由于您的应用程序只有最多五秒的时间来运行挂起事件处理程序代码,因此您需要确保重要的应用程序数据在挂起时已保存到持久存储中。

在编写应用程序时,您需要管理两种类型的数据:会话数据和用户数据。会话数据是与用户当前在应用程序中的体验相关的临时数据。例如,用户正在查看的当前股票、用户正在电子书中阅读的当前页面或一长串项目中的滚动位置。用户数据是持久的,并且无论如何都必须始终可供用户访问。例如,用户正在输入的正在进行的文档、在应用程序中拍摄的照片或用户在游戏中的进度。

鉴于上述情况,我将尝试回答您的问题:

如何保存并恢复一个简单的文本框以从终止状态恢复?

当最终用户在文本框中输入内容时,应用程序会将后台内容保存到数据存储中。借用文字处理软件的工作原理,您可以自动保存文本框“文档”。我认为文本框内容就是上面的博客文章所描述的“用户数据”。由于保存是在暂停之外完成的,因此无需担心时间窗口。

当您的应用程序从终止状态恢复时,它会检查数据存储并将所有数据加载到文本框中。

一旦满足了最低要求,接下来我们可能需要额外的内容,例如光标和窗口位置。

我会将这些项目视为“会话数据”,并在暂停期间保存它们。毕竟,在应用程序处于活动状态时无需跟踪此信息。用户并不关心10分钟前开始打字时光标在哪里——他只关心暂停时的光标位置。

那些困难的事情怎么样,比如撤消历史记录?

我认为撤消历史记录是“用户数据”,并会在发生时(暂停之外)保存它。换句话说,当用户输入内容时,您的应用程序应该保存撤消所需的信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UWP/WinRT:如何保存然后恢复简单的文本框以从终止状态恢复? 的相关文章

随机推荐