я могу читать слишком много в одном аспект вашего вопроса, но роль SuspensionManager
и SessionState
для хранения достаточно информации, чтобы привести свое приложение к тому месту, пользователь оставил его если приложение фактически прекращено время он приостановлен.
В приложении Windows 8 application lifecycle ваше приложение становится «приостановлено», если на передний план выйдет другое приложение. Пока ваше приложение приостановлено, все его состояние сохраняется в памяти, и если он активирован (вы вернетесь к нему), все * будет восстановлено «бесплатно».
Возможно, приостановленное приложение также может быть остановлено ОС (например, b/c), и нет возможности реагировать на этот сценарий в вашем приложении, так что вы действительно делаете с SessionState
хранит , что необходимо, чтобы «воссоздать» последнее место, в котором находился пользователь, если приложение действительно прекратилось. Это, по сути, страховой полис: если приложение просто приостановлено, SessionState
действительно не требуется.
«что необходимо» это серая область, я могли хранить всю информацию о сказать, профиль пользователя, который был в стадии разработки, или я мог спасти только идентификатор пользователя, что индексы в мое постоянное хранение все в профиле пользователя данные. Я обычно имею больше минималистского взгляда и сохраню как можно меньше в SessionState
. Я делаю аналогию с тем, что мне не нужно все помнить, мне нужно только запомнить, как/где получить/найти все.
В вашем вопросе также подразумевается, что вы используете SessionState
для передачи информации между страницами в вашем приложении, и это на самом деле не намерение. Каждая страница вашего приложения обычно связана с моделью просмотра, и когда вы взаимодействуете со страницей этого приложения, вы обновляете модель представления и управляете дополнительными экранами и опытом из изменений, уже существующих в модели представления. Оставляя один экран вашего приложения и возвращающий основной, я также хотел бы сказать, что вы сохраняли всю собранную вами информацию - конечно, к модели представления, но также к чему-то постоянному, как база данных или локальное хранилище. Когда вы пересматриваете эту страницу, вы вытаскиваете данные обратно из своей модели просмотра (или постоянного хранения); главная страница не нуждается в такой информации, так что держись за нее?
Наконец, поскольку вы упомянули о том, что вы новичок в WinRT, вы можете проверить App Builder, который объединит ряд ресурсов в расходуемых кусках, чтобы провести вас через создание приложения в течение 30 дней (хотя все материалы доступно, поэтому вы можете потреблять в любом темпе, который вы хотите :)) Обсуждение управления жизненным циклом, которое связано с вашим вопросом, приходит в День 17 этой последовательности.
* «все восстановлено бесплатно» не обязательно означает, что у вас нет работы, когда приложение выходит из приостановленного состояния.Могут быть устаревшие данные, требующие обновления, и соединения или другие временные или недолговечные объекты могут нуждаться в обновлении/воссоздании.
Состояние сеанса должно быть сериализуемым. Попробуйте приостановить приложение и завершить работу с помощью команды «приостановка и выключение» при отладке приложения после того, как приложение установило состояние сеанса. Вероятно, это приведет к исключению из метода SuspensionManager.save. поэтому, используя атрибуты datacontract, чтобы ваш объект sessionstate (someObject) был прав. – Sushil