Compartilhar via


Suspensão da aplicação para a sua aplicação de separador

Quando um utilizador navega para fora de uma aplicação, a aplicação pode ser suspensa ou terminada. Suspensão significa que a aplicação está em segundo plano e não está visível para o utilizador. Terminação significa que a aplicação está completamente fechada e removida da memória. Suspender uma aplicação melhora o tempo de lançamento subsequente das aplicações no Teams ou noutros produtos do Microsoft 365, permitindo-lhe manter alguns recursos e recursos na memória que pode utilizar quando reidratar a sua aplicação.

Anteriormente, a suspensão da aplicação era referida como uma aplicação em cache e era suportada apenas no Teams, mas agora também é suportada para aplicações do Teams expandidas para execução noutras aplicações do Microsoft 365.

No Teams, a suspensão de aplicações é suportada para os seguintes âmbitos e clientes:

Escopo   Área de trabalho iOS Android
Personal ✔️ Duração da cache: 30 minutos ✔️
Chat ✔️ Duração da cache: 30 minutos ✔️
Canal ✔️ Duração da cache: 30 minutos ✔️
Separador Reunião ✔️ Duração da cache: 30 minutos ✔️
Painel lateral da reunião ou aplicações em reunião ✔️ Duração da cache: 20 minutos

Ativar suspensão da aplicação

Para ativar a suspensão da aplicação, siga os passos:

  1. Chame as APIs app.lifeCycle.registerBeforeSuspendOrTerminate e app.lifeCycle.registerOnResumeHandler . Estes processadores são necessários para ativar a suspensão da aplicação. Para obter mais informações, veja o módulo de ciclo de vida disponível na referência do TeamsJS.

    O app.lifecycle.registerBeforeSuspendOrTerminate processador dá-lhe a oportunidade de realizar algumas tarefas antes de a sua aplicação ser suspensa ou terminada, enquanto a app.lifecycle.registerOnResumeHandler é chamada quando um utilizador navega de volta para a sua aplicação.

    Registar ambos os processadores permite uma aplicação para suspensão de aplicações, mas é importante compreender que o registo não garante que a aplicação não seja terminada em segundo plano. O facto de uma aplicação ser terminada depende de outros fatores, como a memória disponível.

    Observação

    Anteriormente teamsCore.registerBeforeUnloadHandler e teamsCore.registerOnLoadHandler eram utilizados para ativar a colocação em cache de aplicações, mas foram preteridos.

  2. Utilize contentUrl e entityId passe para o processador de currículos para encaminhar para a página correta na sua aplicação e invocar notifySuccess ou notifyFailure notificar o anfitrião de que o fluxo de inicialização da aplicação está concluído.

    • contentUrl: adicionar URL da página de conteúdo.
    • entityId: adicione um identificador exclusivo.
  3. Elimine os recursos e efetue qualquer limpeza necessária no beforeSuspendOrTerminate processador.

O seguinte diagrama de fluxo mostra o primeiro lançamento de uma aplicação que pretende optar pela suspensão da aplicação (registe os resume processadores ou beforeSuspensionOrTerminate no primeiro lançamento da aplicação):

Captura de ecrã a mostrar o fluxo da primeira iniciação da aplicação no painel do lado da reunião.

O seguinte diagrama de fluxo mostra o lançamento de aplicações suspensas:

Captura de ecrã a mostrar o fluxo da iniciação suspensa da aplicação no painel do lado da reunião.

Quando opta pela suspensão da aplicação, o iframe ou o webview utilizado para alojar a aplicação incorporada é reutilizado à medida que os utilizadores navegam para diferentes instâncias da aplicação dentro de uma janela. O iframe ou webview utilizado para alojar a aplicação é ocultado quando os utilizadores saem da aplicação e são apresentados quando os utilizadores regressam à aplicação.

Observação

Se a suspensão da aplicação não estiver ativada, o iframe ou o webview é recriado sempre que o utilizador iniciar a aplicação.

Existem vários motivos para uma aplicação não ser suspensa ou para que uma aplicação seja removida da cache. Alguns motivos gerais nas aplicações do Microsoft 365 são:

  • A carga total da memória é elevada.
  • O número total de aplicações suspensas excede o tamanho máximo da cache. Nestas circunstâncias, a aplicação suspensa mais antiga é removida.
  • A aplicação é terminada se a memória disponível do computador for baixa.
  • A aplicação está suspensa durante muito tempo sem ser retomada.
  • A aplicação não carrega e é terminada.

Na aplicação Teams, alguns dos motivos são (os números aqui estão sujeitos a alterações):

  • Se a carga de memória do sistema for elevada, a aplicação será removida da cache.
  • A aplicação será encerrada se o Teams não receber o readyToUnload sinal do TeamsJS no prazo de 30 segundos após o envio da beforeUnload notificação.
  • A suspensão da aplicação está desativada se a memória do sistema for inferior a 4 GB ou se a memória disponível for inferior a 1 GB no Windows ou 512 MB no Mac.
  • O painel lateral é o único frameContext suportado para suspensão de aplicações em reuniões.
  • A suspensão da aplicação não é suportada para reuniões em que a contagem de utilizadores convidados seja superior a 20.
  • No iOS, quando a aplicação Teams é terminada, a aplicação é removida da cache.

Exemplo de código

O fragmento de código seguinte é um exemplo de app.lifecycle.registerOnResumeHandler APIs e app.lifecycle.registerBeforeSuspendOrTerminateHandler :

MicrosoftTeams.app.lifecycle.registerOnResumeHandler((data) => {  

   console.log("got resume call" , data.contentUrl, data.entityId);  

   // use contentUrl to route to correct page  
   // invoke notifySuccess when ready  

   app.notifySuccess();  

}); 

MicrosoftTeams.app.lifecycle.registerBeforeSuspendOrTerminateHandler(() => {  

   // dispose resources and resolve promise 

}); 

Observação

Anteriormente, as APIs no teamsCore módulo eram utilizadas para ativar a colocação em cache de aplicações. Se uma aplicação se registar para ambos e app.lifecycleteamsCore pares de processadores, os app.lifecycle processadores substituem os teamsCore processadores.

Ferramenta de depuração para aplicações em cache

Observação

A ferramenta de depuração para aplicações em cache está disponível na pré-visualização do programador público para aplicações do Teams.

Pode ativar o Proto Task Manager no Teams, uma ferramenta de depuração que mostra a status das suas aplicações em cache. No seu cliente do Teams, selecione as teclas Controlo+Shift+Alt+8 no Windows ou Comando+Shift+Opção+8 no Mac para abrir o Proto Task Manager.

Captura de ecrã a mostrar o separador colocação em cache no Proto Task Manager no Teams.

O separador AppCaching contém os seguintes detalhes:

  • estado: mostra o estado da aplicação em cache ou não colocada em cache.
  • isActive: mostra a status ativa ou inativa da aplicação em cache.
  • timeElapsed: mostra o tempo decorrido desde que a aplicação foi colocada em cache.
  • supportsLoad: mostra se a aplicação registou o Load processador se a colocação em cache da aplicação estiver ativada.
  • supportsBeforeUnload: mostra se a aplicação registou o BeforeUnload processador se a colocação em cache da aplicação estiver ativada.
  • totalFrameMemory: mostra a utilização da memória da aplicação.
  • totalFrameCommitMemory: mostra a utilização da CPU da aplicação.

Aplicações de separador precaching

Observação

As aplicações de separador precaching são suportadas apenas em clientes web e de ambiente de trabalho do Teams.

Embora a colocação em cache reduza os tempos de carregamento subsequentes de uma aplicação, a pré-instalação otimiza o tempo de carregamento inicial de uma aplicação ao permitir que o Teams pré-carregue a aplicação. O Teams pré-recarrega as aplicações em segundo plano após o início ou quando estão inativas, com base nos padrões de utilização recentes da aplicação dos utilizadores e no histórico de cache das aplicações. As aplicações pré-carregadas permanecem em cache até que o utilizador abra a aplicação, o que resulta num tempo de carregamento mais rápido.

Se ativar a pré-colocação, a sua aplicação utiliza recursos e os dados telemétricos são monitorizados no estado pré-instalado. Para saber como otimizar a sua aplicação para pré-configuração, veja as melhores práticas.

Ativar a pré-configuração para aplicações de separador

Para ativar a pré-criação da sua aplicação de separador, siga estes passos:

  1. Ativar a colocação em cache de aplicações.

  2. Atualize o manifesto da aplicação da seguinte forma:

    1. Defina o valor de showLoadingIndicator como true. Esta ação garante que o Teams aguarda até que a sua aplicação envie notifySuccess para concluir a sequência de carga da aplicação durante a pré-criação. Para obter mais informações, veja showLoadingIndicator.

    2. Adicione o backgroundLoadConfiguration objeto e defina o contentUrl.

      {
      "backgroundLoadConfiguration": {
          "tabConfiguration": {
              "contentUrl": "https://www.contoso.com/content?host=msteams&isBackgroundLoad=true"
              }
          }
      }
      

      Observação

      • O contentUrl não pode conter parâmetros específicos do contexto, como o URL do site de equipa ou o ID do thread, uma vez que o Teams carrega aplicações sem contexto prévio durante o lançamento.
      • O contentUrl tem de ser genérico o suficiente para carregar em segundo plano sem qualquer interação do utilizador.

      Para obter mais informações, veja backgroundLoadConfiguration.

Monitorizar o carregamento em segundo plano

Pode identificar se o Teams carregou a aplicação em segundo plano sem interação do utilizador se monitorizar a isBackgroundLoad propriedade. Se o estado da propriedade for true, indica que o Teams carregou a aplicação em segundo plano e não consegue interagir com o utilizador. Por conseguinte, a aplicação não precisa de compor elementos da IU, como pedidos de início de sessão.

Monitorize a isBackgroundLoad propriedade no contexto da aplicação para otimizar a aplicação para carregamento e composição de precache eficazes. Para obter mais informações, veja isBackgroundLoad.

Práticas recomendadas

Seguem-se as melhores práticas para suspensão e precachagem de aplicações:

  • Recomendamos que implemente capacidades de armazenamento Web ou de trabalho de serviço para armazenar os dados ou a vista Web localmente. Esta estratégia ajuda a carregar a aplicação mais rapidamente nos lançamentos subsequentes.

  • Registe os processadores de suspensão da aplicação no início da sequência de lançamento, como logo após a chamada app.initialize e antes de a aplicação enviar notifySuccess. Se o cliente do Teams não vir estes registos antes de o utilizador sair da aplicação, a aplicação não será colocada em cache.

  • Tente reduzir a quantidade de memória quando o app.lifecycle.onBeforeSuspendOrTerminateHandler processador é chamado e a aplicação está prestes a ser suspensa. Por exemplo, referências de versão, remover eventListeners, colocar em pausa chamadas de sincronização ou parar pedidos de rede.

  • A pré-colocação aumenta o tráfego para a sua aplicação, além dos pedidos iniciados pelo utilizador. Certifique-se de que o ponto final que fornecer como contentUrl pode processar pedidos em segundo plano várias vezes para cada utilizador num dia. Certifique-se de que faz ajustes de telemetria necessários para acomodar o carregamento em segundo plano da aplicação.

  • Certifique-se de que a aplicação utiliza menos ou igual a 130 MB de memória no estado pré-instalado.

Limitações gerais

Seguem-se limitações gerais para a suspensão da aplicação:

  • Não há garantias de que uma aplicação será suspensa. Existem motivos que podem levar à terminação da aplicação, apesar de uma aplicação ter registado os processadores necessários.

  • Uma aplicação só é suspensa quando o utilizador navega para fora da aplicação. Se uma aplicação tiver vários separadores estáticos, quando o utilizador alternar entre separadores, o separador não será suspenso. O processador, app.lifecycle.onBeforeSuspendOrTerminate, continuará a ser chamado.

  • A aplicação suspensa pode ser utilizada na mesma janela. A aplicação suspensa numa janela de pop-out não pode ser reutilizada na janela Principal.

  • Quando uma aplicação é suspensa, todos os processadores registados são eliminados. Quando a aplicação é retomada, todos os processadores, como themeChange ou focusEnter, têm de ser novamente registados. Não são enviadas notificações para a aplicação quando são suspensas. Se a sua aplicação necessitar de notificações mesmo quando está suspensa, a suspensão poderá não ser a solução certa.

  • Apenas as aplicações de página única que utilizam o encaminhamento do lado do cliente para navegação na página podem beneficiar da suspensão e retoma da aplicação. Recomenda-se que o mesmo domínio seja utilizado em todos os contextos da iniciação da sua aplicação.

  • Espera-se que uma aplicação durma quando suspensa. Não são permitidos pedidos do SDK quando a aplicação é suspensa.

  • A aplicação anfitriã invoca o resume processador apenas após a suspendOrTerminate conclusão da sequência da aplicação. Por exemplo, se um utilizador iniciar o separador A da sua aplicação e, em seguida, iniciar o separador B da mesma aplicação, o separador B não recebe o resume sinal até que o suspendOrTerminate processador no separador A termine a execução.

  • As aplicações são colocadas em cache por janela. A colocação em cache de aplicações ocorre numa base por aplicação (não por separador) na mesma janela.

  • A tabela na secção introdutória, Suspensão da aplicação de separador, fornece informações sobre o que o frameContext Teams suporta para colocação em cache. Para hubs que não sejam do Teams, apenas FrameContext.Content é colocado em cache, o que significa FrameContext.Task que isso Dialog não é suportado.

  • Registe apenas o beforeSuspendOrTerminate processador se a aplicação não necessitar de suspensão da aplicação, mas precisar de tempo para guardar o estado em segurança (uma vez que sair da aplicação pode fazer com que o conteúdo da aplicação seja removido abruptamente do Modelo de Objeto de Documento (DOM)). Se a aplicação não tiver sido registada para o resume evento, será removida do DOM após a conclusão do suspendOrTerminate fluxo.

Limitações no Teams

Seguem-se as limitações da suspensão da aplicação na aplicação Teams:

  • O cliente do Teams invoca o resume processador apenas após a suspendOrTerminate conclusão da sequência da aplicação. Por exemplo, se um utilizador iniciar o separador A da sua aplicação e, em seguida, iniciar o separador B da mesma aplicação, o separador B não receberá o resume sinal até que o suspendOrTerminate processador no separador A termine a execução.

  • A suspensão da aplicação não é suportada para a fase ou caixa de diálogo da reunião (referida como módulo de tarefas no TeamsJS v1.x), uma vez que estas podem ser abertas na parte superior do separador e não é possível utilizar a mesma iframe ou vista Web para compor o conteúdo no separador e na caixa de diálogo.

  • Siga as diretrizes nesta secção para integrar a sua aplicação na suspensão da aplicação na reunião do Teams. Para suporte de suspensão de aplicações apenas em reuniões, registe os resume processadores ou beforeSuspendOrTerminate se o contexto for sidePanel.

Solução de problemas

As aplicações não estão a ser suspensas? Por que motivo o processador de currículos não é invocado na navegação subsequente?

  • Verifique se o sistema e as restrições de memória disponíveis são cumpridos.

  • Reduza a quantidade de memória quando colocada em cache. Utilize o beforeSuspendOrTerminate processador para eliminar recursos, por exemplo, referências de versão e remover serviços de escuta de eventos que podem não ser necessários quando colocados em cache.

Exemplo de código

Nome do exemplo Descrição Node.js
Colocação em cache de aplicações Este exemplo mostra como melhorar os tempos de carregamento de aplicações durante as reuniões com a colocação em cache do painel lateral, melhorando a experiência do utilizador no Microsoft Teams. Exibir

Confira também