Использование контрактов и жизненный цикл приложения
Жизненный цикл приложения
Исторически сложилось так, что в Windows пользователи сами решают, когда необходимо открыть (например, вызвав его из меню Пуск) и закрыть приложение (например, выбрав в меню Файл – Выход). WinRT-приложения в Windows 8 уже не требуют от пользователя закрывать программы, когда они не нужны. Вместо этого такие приложения управляются автоматически и могут существовать в одном из нескольких состояний, как показано на рисунке.
Переходы между состояниями в приложениях (состояния: не работает (NotRunning), работает (Running), в режиме ожидания (Suspended); переходы: активируется (Activated), приостанавливается (Suspending), восстанавливается (Resuming))
Чтобы узнать больше, посетите
http://msdn.microsoft.com/en-us/library/windows/apps/hh464925.aspx и http://blogs.msdn.com/b/windowsappdev/archive/2012/04/10/managing-app-lifecycle-so-your-apps-feel-quot-always-alive-quot.aspx
Запуск приложения (переход в состояние Running — работающее) происходит по нажатию на значок приложения на начальном экране. Если пользователь переключается на другое приложение, инициализируется событие Suspending (приостановка работы). Обработчик этого события в приложении обычно выполняет действия по сохранению важных данных и информации о состоянии приложения (например, если это браузер, то может быть сохранен адрес веб-страницы, открытой в этот момент).
Затем приложение переходит в состояние Suspending (ожидание). При этом не используются ресурсы процессора, приложение просто находится в режиме ожидания в фоне. Если пользователь снова переключится на приложение, то инициализируется событие Resuming (возобновление). Обработчик этого события в приложении обычно восстанавливает все важные данные и информацию о состоянии.
Чаще всего пользователь, переключаясь между приложениями в Windows 8, видит их в том же состоянии, что и до сворачивания, то есть состояние приложения восстанавливается автоматически. Но в некоторых ситуациях система не обладает достаточным объемом памяти, чтобы хранить состояние всех неактивных приложений. В таких ситуациях приложения, которым не хватает памяти, переходят в состояние завершения работы, и им придется самостоятельно восстановить состояние при новом запуске.
Кроме того, необходимо учитывать, что приложение может находиться в приостановленном состоянии достаточно длительное время – пользователь может вернуться к приложению через несколько часов. В связи с этим важно обновлять после приостановки любые данные, содержащиеся в приложении.
Упражнение: обработка событий приостановки и восстановления
В нашем тестовом приложении пользователь может осуществлять поиск по данным о картинках в Википедии. Но если приложение было приостановлено и пользователь вернулся к нему через какое-то время, то результаты поиска могут отображать устаревшие данные. Например, в Википедии могли появиться новые изображения, которые соответствуют поисковой строке, введенной пользователем.
Усовершенствуем наше приложение, чтобы решить эту проблему. Для этого добавим обработчики событий приостановки (suspend) и восстановления (resume) .
- Откройте файл /js/default.js в проекте.
- Найдите обработчик события app.oncheckpoint, который был добавлен шаблоном Приложение таблицы (Grid App).
- Найдите комментарий TODO и добавьте выделенный участок кода, как показано ниже. Эта строка сохраняет текущую строку поиска в переменные состояния сессии.
app.oncheckpoint = function (args) { // TODO: This application is about to be suspended. Save any state // that needs to persist across suspensions here. If you need to // complete an asynchronous operation before your application is // suspended, call args.setPromise(). app.sessionState.history = nav.history; app.sessionState.searchText = Data.groupSearch.title; };
- В начале файлаdefault.js найдите следующий комментарий TODO и вставьте выделенный текст, как показано ниже. Код обновит результаты поиска, когда приложение будет восстановлено.
} else { // TODO: This application has been reactivated from suspension. // Restore application state here. Data.groupSearch.title = app.sessionState.searchText; Data.getBySearch(Data.groupSearch); }
- Запустите проект с помощью кнопки F5 или выбрав в меню Отладка/Начать отладку (Debug/Start Debugging).
- Visual Studio позволяет протестировать, как срабатывает приостановка и восстановление работы приложений с помощью настроек панели инструментов. Попробуйте свернуть (приостановить) приложение, а затем восстановить с помощью списка состояний, как показано на рисунке.
Итоги
Интеграция приложений и панели чудо-кнопок – важная часть работы WinRT-приложений. Чтобы обеспечить такую функциональность, вы должны объявить контракты и добавить код обработчиков событий. Кроме того, приложения, написанные вами по общеизвестной схеме жизненного цикла, удобны для пользователя.
Самостоятельная работа
Пройдя по следующей ссылке, вы найдете руководство по интеграции приложения и панели чудо-кнопок. Попробуйте добавить к приложению, разработанному в этом модуле, дополнительные настройки, используя элемент SettingsFlyout (панель параметров): http://msdn.microsoft.com/en-us/library/windows/apps/hh770544.aspx
Вопросы
- Вы хотите предоставить некоторые пользовательские настройки в своем приложении, например, установку фонового изображения или настройку перечня избранных элементов. Какой контракт и какая чудо-кнопка вам нужны, чтобы это реализовать?
- Вы хотите дать пользователю возможность отправлять друзьям ссылки на статьи с помощью электронной почты или приложений для работы с социальными сетями. Как это сделать?
- Зачем приложению может понадобиться обрабатывать событие checkpoint (проверка состояния) для сохранения состояния? При каких обстоятельствах такое сохранение понадобится?
Дополнительные ресурсы
Чтобы больше узнать об использовании контрактов и жизненном цикле приложений, воспользуйтесь следующими ресурсами.
- Запуск, возобновление и многозадачность
http://msdn.microsoft.com/en-us/library/windows/apps/hh770838.aspx
Рассказывает о том, как обрабатывать события жизненного цикла в собственном приложении, а также как работают фоновые задачи.
- Контракты и расширения приложений
http://msdn.microsoft.com/en-us/library/windows/apps/hh464906.aspx
Обзор всех контрактов и расширений со ссылками к соответствующим статьям и пошаговым руководствам.
- Добавление контрактов Windows 8 в приложение
Описывает контракты и показывает, как интегрировать опции поиска и открытия файла в приложение.
Ответы
- Будут использованы чудо-кнопка Параметры (Settings) и контракт "Параметры" (Settings). С их помощью пользователь сможет работать с такими параметрами, как фоновое изображение или избранное.
- Чтобы добавить такую функциональность, надо использовать контракт "Общий доступ" (Share Contract).
- Если в системе слишком мало свободной памяти, свернутые приложения могут быть закрыты системой. Когда пользователь захочет вернуться к свернутому и затем закрытому по этой причине приложению, данные о состоянии могут быть восстановлены, если предварительно сохранить их с помощью обработчика события checkpoint.