В этом документе описывается жизненный цикл Приложение Windows 10 UWP, в нем говорится:
Теперь пользователи ожидают, что ваше приложение запомнит свое состояние, когда они будут работать в многозадачном режиме на своем устройстве. Например, они ожидают, что страница будет прокручена до той же позиции, а все элементы управления будут в том же состоянии, что и раньше. Понимая жизненный цикл запуска, приостановки и возобновления работы приложения, вы можете обеспечить такое плавное поведение.
Тем не менее, похоже, не так много документации о том, как это на самом деле достигается. Я полагаю, что все должно быть сохранено вручную разработчиком приложения, а затем воссоздано с нуля при возобновлении работы с использованием любых данных, которые вы спрятали, когда приложение было приостановлено, и все это для того, чтобы создать иллюзию того, что точное состояние памяти приложения никогда не менялось. .
Я пытаюсь разобраться в этом, используя лишь минимальный пример, страницу XAML, не содержащую ничего, кроме TextBox. Однако даже в этой ситуации я немного пытаюсь понять, как достичь цели. Я изложу более общие мысли, но мой конкретный вопрос заключается в том, как сохранить, а затем восстановить простое текстовое поле для возобновления работы после прекращения работы? Я работаю на C++/CX, но приму любую помощь, которую я может получить.
Вот мои мысли по этому поводу:
- At minimum, obviously the text of the TextBox has to be saved.
- This could be saved into the
ApplicationData::Current->LocalSettings
. - Одна проблема, которую я сразу же вижу, заключается в том, что в документе, который я цитировал выше, говорится о жизненных циклах, в котором говорится, что приложения должны позаботиться о своем сохранении в течение 5 секунд после сигнала приостановки или завершения работы. Текстовое поле потенциально может содержать много данных, что может привести к отключению сохранения из-за загруженного ввода-вывода, особенно если мы начнем масштабирование за пределы тривиальной ситуации с одним текстовым полем.
- К счастью, в документе говорится: «Мы рекомендуем использовать для этой цели API-интерфейсы данных приложения, поскольку они гарантированно завершатся до того, как приложение перейдет в состояние «Приостановлено». Дополнительные сведения см. в разделе Доступ к данным приложения с помощью приложения UWP». К сожалению, когда вы переходите по этой ссылке, там нет ничего подходящего, предоставляющего более подробную информацию, и я не могу найти ничего, документирующего это поведение в API. Сохраняя в
ApplicationData::Current->LocalSettings
, мы защищены от отключения из-за поврежденных или потерянных данных?
- This could be saved into the
- Once the minimum has been taken care of, next we'll probably need extras like cursor and window position.
- We can get the cursor position with
TextBox->SelectionStart
, which as far as I can tell, is undocumented in the API of this usage of returning the current cursor position. This seems an easy fit to also store as anint
intoApplicationData::Current->LocalSettings
. - Как мы можем получить, сохранить и восстановить положение прокрутки окна TextBox?
- We can get the cursor position with
- Теперь, когда у нас есть дополнения, как насчет сложных вещей, таких как отмена истории? Я предполагаю, что это невозможно, так как мой вопрос о Stackoverflow о том, как получить доступ к средству отмены TextBox, не получил ответа. Тем не менее, это кажется плохим пользовательским опытом, если они переключаются на другое приложение, возвращаются, думая, что приложение никогда не закрывалось из-за прекрасного и бесшовного восстановления после закрытия, которое мы внедрили, и их история отмен была стерта.
- Есть ли что-то еще, что нужно сохранить для TextBox, чтобы создать идеальный пользовательский опыт? Я что-то упустил или есть более простой способ сделать все это? Как что-то вроде Microsoft Edge Browser справится со сложным случаем, когда есть десятки вкладок, вводов форм, позиций прокрутки и т. д., которые нужно сохранить за 5 секунд?
NavigationCacheMode.Required
илиNavigationCacheMode.Enabled
в конструкторе. - person tao   schedule 13.08.2015SuspensionManager
для его реализации. - person tao   schedule 13.08.2015