Опубликован: 26.12.2012 | Уровень: для всех | Доступ: платный
Лекция 8:

Использование контрактов и жизненный цикл приложения

< Лекция 7 || Лекция 8: 12 || Лекция 9 >

Жизненный цикл приложения

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

Переходы между состояниями в приложениях (состояния: не работает (NotRunning), работает (Running), в режиме ожидания (Suspended); переходы: активируется (Activated), приостанавливается (Suspending), восстанавливается (Resuming))

Переходы между состояниями в приложениях (состояния: не работает (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 позволяет протестировать, как срабатывает приостановка и восстановление работы приложений с помощью настроек панели инструментов. Попробуйте свернуть (приостановить) приложение, а затем восстановить с помощью списка состояний, как показано на рисунке.
    Подменю Приостановить/Восстановить на панели Visual Studio

    Подменю Приостановить/Восстановить на панели Visual Studio

Итоги

Интеграция приложений и панели чудо-кнопок – важная часть работы WinRT-приложений. Чтобы обеспечить такую функциональность, вы должны объявить контракты и добавить код обработчиков событий. Кроме того, приложения, написанные вами по общеизвестной схеме жизненного цикла, удобны для пользователя.

Самостоятельная работа

Пройдя по следующей ссылке, вы найдете руководство по интеграции приложения и панели чудо-кнопок. Попробуйте добавить к приложению, разработанному в этом модуле, дополнительные настройки, используя элемент SettingsFlyout (панель параметров): http://msdn.microsoft.com/en-us/library/windows/apps/hh770544.aspx

Вопросы

  1. Вы хотите предоставить некоторые пользовательские настройки в своем приложении, например, установку фонового изображения или настройку перечня избранных элементов. Какой контракт и какая чудо-кнопка вам нужны, чтобы это реализовать?
  2. Вы хотите дать пользователю возможность отправлять друзьям ссылки на статьи с помощью электронной почты или приложений для работы с социальными сетями. Как это сделать?
  3. Зачем приложению может понадобиться обрабатывать событие checkpoint (проверка состояния) для сохранения состояния? При каких обстоятельствах такое сохранение понадобится?

Дополнительные ресурсы

Чтобы больше узнать об использовании контрактов и жизненном цикле приложений, воспользуйтесь следующими ресурсами.

Ответы

  1. Будут использованы чудо-кнопка Параметры (Settings) и контракт "Параметры" (Settings). С их помощью пользователь сможет работать с такими параметрами, как фоновое изображение или избранное.
  2. Чтобы добавить такую функциональность, надо использовать контракт "Общий доступ" (Share Contract).
  3. Если в системе слишком мало свободной памяти, свернутые приложения могут быть закрыты системой. Когда пользователь захочет вернуться к свернутому и затем закрытому по этой причине приложению, данные о состоянии могут быть восстановлены, если предварительно сохранить их с помощью обработчика события checkpoint.
< Лекция 7 || Лекция 8: 12 || Лекция 9 >
Роман Храпай
Роман Храпай
Россия
ashutos Jain
ashutos Jain
Индия, New Delhi