Когда сохранять состояние приложения для захоронения?

Мне было интересно, когда более целесообразно сохранять модель представления отдельных страниц.

Я вижу две возможности:

  1. Сохраняйте состояние каждой страницы (это модель просмотра) каждый раз, когда вы переходите с нее, чтобы она уже была сохранена, если приложение будет завершено и повторно активировано во время процесса захоронения.
  2. В событии деактивации приложения просмотрите все страницы, которые находятся в стеке навигации, и сохраните их состояние (их модель представления), а затем повторно вставьте его в событие активации приложения.

Каков правильный способ обращения с ним?

Спасибо Симона


person CodeClimber    schedule 07.01.2011    source источник


Ответы (4)


К сожалению, «лучшее» время для сохранения состояния будет зависеть от: приложения; сложность моделей, используемых каждой страницей; взаимодействие, которое поддерживает каждая страница; и сложность моделей, используемых на разных страницах (на уровне приложения).

В качестве общего правила я стараюсь использовать единую модель на уровне приложения и сохранять ее при активации/деактивации. Модель для страницы является ссылкой на часть модели уровня приложения, и я сохраняю только конкретную информацию о странице при переходе со страницы/на страницу.

Примеры конкретной информации о странице, которую я сохраняю: введенные, но несохраненные данные; и прокрутите позиции.

person Matt Lacey    schedule 07.01.2011

Я полагаю, это зависит от ваших потребностей, но вряд ли вам нужно отклоняться от документации, которая предлагает событие деактивации приложения как подходящее место для сохранения постоянных и временных (состояния) данных, в то время как close должен сохранять только постоянные. Обзор модели выполнения (см. блок-схему в разделе «Активация»)

Эта статья также дает достойное объяснение с примерами жизненного цикла приложения и захоронения, различая откат/закрытие, деактивацию и захоронение.

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

person moribvndvs    schedule 07.01.2011

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

Если вам нужно сохранить что-либо между сеансами приложения, вы можете использовать событие Application.Closing, но в зависимости от того, что вам нужно сохранить, вы можете просто сохранять его всякий раз, когда оно изменяется. Опять же, в зависимости от того, что вам нужно сохранить, вы можете либо восстановить его в событии Application.Launching, либо просто прочитать его, когда вам это нужно.

person Derek Lakin    schedule 07.01.2011

Это то, над чем я тоже подумал.

Я обобщил свой взгляд на это.

Сохраняйте как можно раньше.

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

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

Императивы, которые могут побудить вас отложить сбережения, могут включать:

  • В зависимости от вашей архитектуры может быть неудобно реализовывать сохранение данных на уровне страницы.
  • В зависимости от объема сохраняемых данных и архитектуры вашей модели изолированного хранилища это может существенно снизить производительность, пытаясь сохранить на уровне страницы или поля.
person Mick N    schedule 08.01.2011