Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
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.registerBeforeSuspendOrTerminateprocessador dá-lhe a oportunidade de realizar algumas tarefas antes de a sua aplicação ser suspensa ou terminada, enquanto aapp.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.registerBeforeUnloadHandlereteamsCore.registerOnLoadHandlereram utilizados para ativar a colocação em cache de aplicações, mas foram preteridos.Utilize
contentUrleentityIdpasse para o processador de currículos para encaminhar para a página correta na sua aplicação e invocarnotifySuccessounotifyFailurenotificar 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.
Elimine os recursos e efetue qualquer limpeza necessária no
beforeSuspendOrTerminateprocessador.
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):
O seguinte diagrama de fluxo mostra o lançamento de aplicações suspensas:
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
readyToUnloadsinal do TeamsJS no prazo de 30 segundos após o envio dabeforeUnloadnotificaçã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.
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
Loadprocessador se a colocação em cache da aplicação estiver ativada. -
supportsBeforeUnload: mostra se a aplicação registou o
BeforeUnloadprocessador 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:
Atualize o manifesto da aplicação da seguinte forma:
Defina o valor de
showLoadingIndicatorcomotrue. Esta ação garante que o Teams aguarda até que a sua aplicação envienotifySuccesspara concluir a sequência de carga da aplicação durante a pré-criação. Para obter mais informações, veja showLoadingIndicator.Adicione o
backgroundLoadConfigurationobjeto e defina ocontentUrl.{ "backgroundLoadConfiguration": { "tabConfiguration": { "contentUrl": "https://www.contoso.com/content?host=msteams&isBackgroundLoad=true" } } }Observação
- O
contentUrlnã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
contentUrltem de ser genérico o suficiente para carregar em segundo plano sem qualquer interação do utilizador.
Para obter mais informações, veja backgroundLoadConfiguration.
- O
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.initializee antes de a aplicação enviarnotifySuccess. 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.onBeforeSuspendOrTerminateHandlerprocessador é 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
contentUrlpode 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
themeChangeoufocusEnter, 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
resumeprocessador apenas após asuspendOrTerminateconclusã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 oresumesinal até que osuspendOrTerminateprocessador 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
frameContextTeams suporta para colocação em cache. Para hubs que não sejam do Teams, apenasFrameContext.Contenté colocado em cache, o que significaFrameContext.Taskque issoDialognão é suportado.Registe apenas o
beforeSuspendOrTerminateprocessador 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 oresumeevento, será removida do DOM após a conclusão dosuspendOrTerminatefluxo.
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
resumeprocessador apenas após asuspendOrTerminateconclusã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á oresumesinal até que osuspendOrTerminateprocessador 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
resumeprocessadores oubeforeSuspendOrTerminatese o contexto forsidePanel.
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
beforeSuspendOrTerminateprocessador 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 |