Событие приложения WinPhone для реакции на завершение процесса приложения

Когда мы деактивируем приложение WP, оно может быть удалено и остановлено ОС позже. Мне нужно сохранить некоторые несохраненные данные приложения в постоянном хранилище после завершения процесса, но не раньше. Очевидно, что событие Deactivated не может быть использовано для этой цели, так как оно вызывается сразу же, когда приложение перемещается в фоновый режим; событие Close также не является тем событием, которое нам нужно, поскольку оно не возникает, когда процесс приложения завершается операционной системой. Есть ли для этого специальное событие приложения Windows Phone, например, Application_Terminated?


person TecMan    schedule 07.04.2014    source источник
comment
Рекомендуется, чтобы ваше приложение сохраняло важные данные поэтапно. Еще один рискованный способ — использовать State PhoneApplicationService: ">MSDN   -  person David To    schedule 07.04.2014


Ответы (2)


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

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

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

person Arunjeet Singh    schedule 12.04.2014

Нет такого события. Вы должны сохранить свое состояние на «Деактивировано», чтобы, если приложение было удалено из памяти (захоронено), вы могли снова настроить себя при повторной активации. Если ваша проблема заключается в том, чтобы выяснить, нужно ли вам восстанавливать состояние на Activated, проверьте флаг ActivatedEventArgs.IsApplicationInstancePreserved (http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.shell.activatedeventargs.isapplicationinstancepreserved(v=vs.105).aspx). Этот флаг сообщает вам, было ли ваше приложение захоронено. Если это не так, вы можете выбросить старое состояние или перезаписать его при следующей деактивации.

person Arunjeet Singh    schedule 09.04.2014
comment
Я делаю это прямо сейчас и использую IsApplicationInstancePreserved. Я бы предпочел не сохранять текущие несохраненные данные, введенные пользователем в событии «Деактивировано», так как в этом случае мы теряем необходимые функции «ОК/Отмена», когда наше приложение деактивировано. - person TecMan; 09.04.2014