Como manipular a ativação de aplicativos (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Saiba como definir a experiência de ativação do seu aplicativo do Tempo de Execução do Windows.

Sempre que o aplicativo for iniciado, o evento activated será acionado. Esse evento pode também ser acionado durante a execução do aplicativo se o sistema precisar passar os parâmetros de aplicativo relacionados a um novo contrato de ativação. Você pode usar o evento activated para restaurar o estado anterior do aplicativo e recuperar os parâmetros de ativação relacionados ao contrato para o qual o aplicativo está sendo ativado. Para obter uma lista completa dos contratos de ativação e mais detalhes sobre os parâmetros, veja a enumeração ActivationKind.

As etapas a seguir mostrarão como se registrar para o evento activated, usá-lo para restaurar algum estado de aplicativo básico e usá-lo para manipular uma ativação padrão de um bloco.

Instruções

Etapa 1: Registrar-se para o evento ativado

Registre-se para o evento activated no escopo global. Esse exemplo configura o activatedHandler como o manipulador de ativação. O manipulador de ativação permite a recuperação do estado ApplicationExecution anterior do aplicativo e os argumentos de ativação. Para obter uma lista de tipos de ativação, consulte a enumeração ActivationKind.


var app = WinJS.Application;

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

Etapa 2: Restaurar dados de aplicativos se o aplicativo foi suspenso e terminado

O sistema operacional pode encerrar o aplicativo por inúmeros motivos depois que ele é suspenso. Alguns exemplos de quando isso pode acontecer são: o usuário fecha manualmente o aplicativo, o usuário efetua logout ou o sistema está com poucos recursos. Se o usuário inicia o aplicativo depois que o sistema operacional o terminou, ele recebe um evento activated. Use o objeto sessionState sessionState para determinar se você precisa restaurar os dados do aplicativo ou começar com seus padrões. Se as variáveis sessionState estão definidas, use-as para restaurar os dados do aplicativo e atualizar o conteúdo exibido. Se eles não estiverem definidos, carregue os padrões.

Você também pode usar a propriedade PreviousExecutionState nos argumentos de evento para determinar se seu aplicativo deve restaurar o estado ou não. Se essa propriedade tiver um valor de ApplicationExecutionState de Terminated, você deverá restaurar o estado. Se for qualquer outro valor, você deverá carregar os padrões do aplicativo.

Observação   Se o aplicativo está sendo ativado enquanto está sendo executado, tenha cuidado para não restaurar os dados salvos.

 

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             
      }

   }
}

Etapa 3: Se iniciado em um novo computador, consulte os blocos secundários existentes

// 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 
      }
   });
}

Etapa 4: Recuperar os argumentos de ativação

Quando o sistema ativa o aplicativo, deve haver contexto adicional para a ativação.

Cada tipo de contrato de ativação tem seu próprio conjunto de parâmetros que fornecem a você mais informações sobre as causas da ativação do aplicativo. As classes eventArgs de cada contrato são definidas no namespace Windows.UI.WebUI. Este trecho de código mostra como recuperar os argumentos de uma inicialização de bloco padrão.

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();)

    }
}

Etapa 5: Configurar a interface do usuário de um aplicativo

Quando você manipula a ativação para uma inicialização inicial, o sistema exibirá a tela inicial até que o aplicativo conclua a ativação. Em alguns casos, seu aplicativo pode ter que fazer trabalho assíncrono, como ler as configurações de um arquivo, para inicializar corretamente sua interface do usuário. Esse trabalho deve ser feito durante a ativação para que a tela inicial não seja desativada até que a interface do usuário seja concluída. Você pode adiar a conclusão da ativação usando o método setPromise() no eventArgs de ativação. No trecho de código anterior, setPromise() é usado para adiar a conclusão da ativação até que a chamada assíncrona para processAll() seja concluída.

Se você usa os modelos do Microsoft Visual Studio, setPromise() é chamado para você. Se você tiver trabalho assíncrono que deve ser concluído antes que a tela inicial seja subdividida, conclua este trabalho durante o evento "processado" do seu novo fragmento de página. Não deixe de retornar um objeto Promise dessa atividade assíncrona para atrasar a conclusão do evento "processado" até que a atividade seja concluída. O evento processado é chamado sempre que o aplicativo navega para um fragmento de página específico. Por isso, verifique se qualquer código específico para a ativação só é executado em uma navegação acionada por uma ativação. Na navegação normal, esse código deve ser ignorado.

Observação  A tela inicial serve apenas para cobrir as atividades muito breves que são necessárias para configurar sua interface do usuário inicial. As atividades de execução longa, como as chamadas para a rede ou o carregamento de um arquivo grande do disco, não devem ser feitas durante a ativação. Nesses casos, o aplicativo deve configurar uma interface do usuário de progresso durante a ativação ou uma tela inicial estendida e retornar da ativação imediatamente, enquanto a operação assíncrona é concluída em segundo plano.

 

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.
           }

Comentários

Quando o aplicativo é iniciado, o evento ativado é gerado depois do evento DOMContentLoaded e antes do evento WinJS.Application.onloaded. Enquanto o aplicativo está em execução, os eventos ativados podem ser gerados a qualquer momento.

Observação  Se seu aplicativo precisar navegar para o documento de nível superior por qualquer motivo, primeiro você terá que concluir a ativação antes de tentar a navegação para o nível superior. Se você tentar uma navegação para o nível superior antes que a ativação seja concluída, seu aplicativo falhará. Isso assegura que seu aplicativo e o sistema estejam em um estado consistente antes que o contexto JavaScript seja destruído e recriado durante a navegação.

 

Observação  

Para os aplicativos da Loja do Windows Phone, o evento resuming é sempre seguido pelo evento activated, mesmo quando seu aplicativo está suspenso e o usuário reinicia o aplicativo de um bloco principal ou da lista de aplicativos. Os aplicativos podem ignorar a inicialização se já houver conteúdo definido na janela atual. Você pode verificar a propriedade do LaunchActivatedEventArgs.TileId para determinar se o aplicativo foi iniciado de um bloco principal ou secundário e, de acordo com essa informação, decidir se deve atualizar ou retomar o aplicativo.

Exemplo completo

Consulte o Exemplo de ativação e suspensão de aplicativo usando WinJS e o Exemplo de ativação, retomada e suspensão de aplicativo usando WRL para obter exemplos de código completos que mostram como manipular eventos de ciclo de vida do aplicativo.

Tópicos relacionados

Tarefas

Como suspender um aplicativo

Como retomar um aplicativo

Conceitual

Ciclo de vida do aplicativo

Referência

Windows.ApplicationModel.Activation.ActivationKind

Windows.UI.WebUI.WebUILaunchActivatedEventArgs

WinJS.Application.activated