2013-04-15 1 views
1

Я новичок в WinRT и играл с состоянием сеанса. Я перехожу на страницу для сбора данных, а затем хочу вернуться на главную страницу. Непосредственно перед навигацией я использую:WinRT Сохранение состояния сеанса между навигацией по страницам

SuspensionManager.SessionState["CurrentState"] = someObject; 

Объект содержит списки других умеренно сложных объектов и т.д. ... Все, кажется, работает, но это правильный способ использования Подвесной Manager?

Я просмотрел другие сообщения по этой теме, и некоторые люди сообщают, что необходимо использовать атрибуты [DataContract] и [DataMember] для всех классов, которые сериализованы. Я опустил их, и он все еще работает (получение данных через страницы). Итак, каков рекомендуемый подход?

+0

Состояние сеанса должно быть сериализуемым. Попробуйте приостановить приложение и завершить работу с помощью команды «приостановка и выключение» при отладке приложения после того, как приложение установило состояние сеанса. Вероятно, это приведет к исключению из метода SuspensionManager.save. поэтому, используя атрибуты datacontract, чтобы ваш объект sessionstate (someObject) был прав. – Sushil

ответ

1

я могу читать слишком много в одном аспект вашего вопроса, но роль SuspensionManager и SessionState для хранения достаточно информации, чтобы привести свое приложение к тому месту, пользователь оставил его если приложение фактически прекращено время он приостановлен.

В приложении Windows 8 application lifecycle ваше приложение становится «приостановлено», если на передний план выйдет другое приложение. Пока ваше приложение приостановлено, все его состояние сохраняется в памяти, и если он активирован (вы вернетесь к нему), все * будет восстановлено «бесплатно».

Возможно, приостановленное приложение также может быть остановлено ОС (например, b/c), и нет возможности реагировать на этот сценарий в вашем приложении, так что вы действительно делаете с SessionState хранит , что необходимо, чтобы «воссоздать» последнее место, в котором находился пользователь, если приложение действительно прекратилось. Это, по сути, страховой полис: если приложение просто приостановлено, SessionState действительно не требуется.

«что необходимо» это серая область, я могли хранить всю информацию о сказать, профиль пользователя, который был в стадии разработки, или я мог спасти только идентификатор пользователя, что индексы в мое постоянное хранение все в профиле пользователя данные. Я обычно имею больше минималистского взгляда и сохраню как можно меньше в SessionState. Я делаю аналогию с тем, что мне не нужно все помнить, мне нужно только запомнить, как/где получить/найти все.

В вашем вопросе также подразумевается, что вы используете SessionState для передачи информации между страницами в вашем приложении, и это на самом деле не намерение. Каждая страница вашего приложения обычно связана с моделью просмотра, и когда вы взаимодействуете со страницей этого приложения, вы обновляете модель представления и управляете дополнительными экранами и опытом из изменений, уже существующих в модели представления. Оставляя один экран вашего приложения и возвращающий основной, я также хотел бы сказать, что вы сохраняли всю собранную вами информацию - конечно, к модели представления, но также к чему-то постоянному, как база данных или локальное хранилище. Когда вы пересматриваете эту страницу, вы вытаскиваете данные обратно из своей модели просмотра (или постоянного хранения); главная страница не нуждается в такой информации, так что держись за нее?

Наконец, поскольку вы упомянули о том, что вы новичок в WinRT, вы можете проверить App Builder, который объединит ряд ресурсов в расходуемых кусках, чтобы провести вас через создание приложения в течение 30 дней (хотя все материалы доступно, поэтому вы можете потреблять в любом темпе, который вы хотите :)) Обсуждение управления жизненным циклом, которое связано с вашим вопросом, приходит в День 17 этой последовательности.

* «все восстановлено бесплатно» не обязательно означает, что у вас нет работы, когда приложение выходит из приостановленного состояния.Могут быть устаревшие данные, требующие обновления, и соединения или другие временные или недолговечные объекты могут нуждаться в обновлении/воссоздании.