Как обрабатывать активацию приложения (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

Узнайте, как определять процесс активации для вашего приложения среды выполнения Windows.

Каждый раз, когда запускается приложение, вызывается событие activated. Это событие также может быть вызвано во время работы приложения, когда системе нужно передать приложению параметры, относящиеся к новому контракту активации. Используя событие activated, вы можете восстановить предыдущее состояние приложения и получить параметры активации, относящиеся к контракту, для которого активировано приложение. Полный список контрактов активации и подробные сведения об их параметрах см. в перечислении ActivationKind.

Следующие шаги демонстрируют способ регистрации события activated, его использование для восстановления определенного базового состояния приложения и для обработки активации по умолчанию с плитки.

Инструкции

Этап 1: Регистрация для события "Активировано"

Зарегистрируйте событие activated в глобальной области. В этом примере activatedHandler задается в качестве обработчика события активации. Обработчик события активации позволяет получать предыдущее состояние ApplicationExecution вашего приложения и аргументы активации. Список типов активации см. в перечислении ActivationKind.


var app = WinJS.Application;

app.addEventListener("activated", activatedHandler, false);
app.start();

Этап 2: Восстановите данные приложения, если его работа была приостановлена, а затем завершена

После приостановки приложения операционная система может завершить его выполнение по ряду причин. Несколько примеров, когда это может произойти: пользователь вручную закрывает приложение, пользователь выходит из системы или системе не хватает ресурсов. Если пользователь запускает приложение после того, как ОС завершила его работу, приложение получает событие activated. Используйте объект sessionState, чтобы определить, нужно ли восстанавливать данные приложения или оно должно начинать работу с параметрами по умолчанию. Если переменные sessionState определены, используйте их, чтобы восстановить данные приложения и обновить отображаемое содержимое. Если они не определены, загрузите параметры по умолчанию.

Можно также использовать свойство PreviousExecutionState в аргументах события, чтобы определить, следует ли приложению восстанавливать состояние. Если это свойство имеет для параметра ApplicationExecutionState значение Terminated, то следует восстановить состояние. Если значение отличается, следует загружать настройки приложения по умолчанию.

Примечание   Если ваше приложение активируется, когда оно уже выполняется, вам следует быть осторожным и не восстанавливать сохраненные данные.

 

function activatedHandler(eventArgs) {
   if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
   {
      // Check whether my session state variables are valid.
      // If so, retrieve the application data saved in the checkpoint handler
      if (app.sessionState) 
      {
         // TODO: Populate the UI with the previously saved application data            
      } 
      else
      {
         // TODO: Populate the UI with defaults             
      }

   }
}

Этап 3: При запуске на новом компьютере запросите существующие вспомогательные плитки.

// Get secondary tile ids for the application and list them out

Windows.UI.StartScreen.SecondaryTile.findAllAsync().then(function (tiles) {
   if (tiles) {
      tiles.forEach(function (tile) {
         // Inspect the tile and do required work 
      });
   } 
   else {
      // there are no tiles 
      }
   });
}

Этап 4: Получение аргументов активации

При активации вашего приложения системой возможно наличие дополнительного контекста для активации.

У каждого типа контракта активации есть собственный уникальный набор параметров, дающий вам дополнительную информацию о причинах активации вашего приложения. Классы eventArgs для каждого контракта определены в пространстве имен Windows.UI.WebUI. Этот фрагмент кода показывает, как получить аргументы при запуске со стандартной плитки.

function activatedHandler(eventArgs) {
    if (eventArgs.detail.kind == Windows.ApplicationModel.Activation.ActivationKind.launch) 
    {
        if (eventArgs.detail.arguments !== '')
        {
            // TODO: Parse the arguments string
        }
    // Initialize the WinJS controls
    eventArgs.setPromise(WinJS.UI.processAll();)

    }
}

Этап 5: Настройка пользовательского интерфейса приложения

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

Если вы используете шаблоны Microsoft Visual Studio, метод setPromise() вызывается автоматически. Если вам необходимо завершить асинхронную работу, прежде чем исчезнет экран-заставка, выполните эту работу во время события processed для нового фрагмента страницы. Убедитесь, что вы возвращаете объект Promise этой асинхронной операции, чтобы отложить выполнение события processed до завершения операции. Событие processed вызывается при каждом перемещении вашего приложения к определенному фрагменту страницы, поэтому убедитесь, что любой код, относящийся к активации, выполняется только при навигации, запущенной активацией. При обычной навигации этот код следует пропускать.

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

 

processed: function (element, options) {
            // During an initial activation this event is called before activation completes.
            // Do any initialization work that is required for the initial UI to be complete.
            // Retrieve settings from a file
            return app.local.readText(settingsFile, "default").then(function (str){
                //use the settings to update the UI
            }, function () {
                //handle the error condition
               });
           },

ready:     function (element, options) {
            // During an initial activation this event is called after activation completes.
            // Do any initialization work that is not related to getting the initial UI set up.
           }

Замечания

При запуске приложения активированное событие создается после события DOMContentLoaded и до события WinJS.Application.onloaded. Во время работы приложения активированные события можно создавать в любое время.

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

 

Примечание  

Для универсальных приложений Windows Phone за событием resuming всегда следует событие activated, даже если ваше приложение в данный момент приостановлено, а пользователь заново запускает приложение с основной плитки или из списка приложений. Приложения могут пропустить инициализацию, если в текущем окне содержимое уже задано. Вы можете проверить свойство LaunchActivatedEventArgs.TileId, чтобы определить, с какой плитки было запущено приложение (основной или вспомогательной), и на основании этого решить, предоставлять ли новое или возобновленное взаимодействие для приложения.

Полный пример

Полные примеры кода, демонстрирующие обработку событий жизненного цикла приложения, см. в разделах Образец активации и приостановки приложения с использованием WinJS и Образец активации, возобновления и приостановки приложения с использованием WRL.

Связанные разделы

Задачи

Приостановка работы приложения

Возобновление работы приложения

Понятия

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

Справочные материалы

Windows.ApplicationModel.Activation.ActivationKind

Windows.UI.WebUI.WebUILaunchActivatedEventArgs

WinJS.Application.activated