Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn ein Benutzer von einer App weg navigiert, kann die App entweder angehalten oder beendet werden. Das Anhalten bedeutet, dass sich die App im Hintergrund befindet und für den Benutzer nicht sichtbar ist. Beendigung bedeutet, dass die App vollständig geschlossen und aus dem Arbeitsspeicher entfernt wird. Das Anhalten einer App verbessert die nachfolgende Startzeit der Apps in Teams oder anderen Microsoft 365-Produkten, da Sie einige Ressourcen und Ressourcen im Arbeitsspeicher behalten können, die Sie verwenden können, wenn Sie Ihre App aktivieren.
Zuvor wurde das Anhalten von Apps als zwischengespeicherte App bezeichnet und nur in Teams unterstützt, aber jetzt wird sie für Teams-Apps unterstützt, die auch für andere Microsoft 365-Anwendungen erweitert wurden.
In Teams wird das Anhalten von Apps für die folgenden Bereiche und Clients unterstützt:
| Bereich | Desktop | iOS | Android |
|---|---|---|---|
| Personal | ✔️ Cachelebensdauer: 30 Minuten | ✔️ | ❌ |
| Chat | ✔️ Cachelebensdauer: 30 Minuten | ✔️ | ❌ |
| Kanal | ✔️ Cachelebensdauer: 30 Minuten | ✔️ | ❌ |
| Registerkarte "Besprechung" | ✔️ Cachelebensdauer: 30 Minuten | ✔️ | ❌ |
| Besprechungsseitenbereich oder Apps in Besprechungen | ✔️ Cachelebensdauer: 20 Minuten | ❌ | ❌ |
Aktivieren des Anhaltens von Apps
Führen Sie die folgenden Schritte aus, um das Anhalten der App zu aktivieren:
Rufen Sie die APIs app.lifeCycle.registerBeforeSuspendOrTerminate und app.lifeCycle.registerOnResumeHandler auf. Diese Handler sind erforderlich, um das Anhalten von Apps zu aktivieren. Weitere Informationen finden Sie im Lebenszyklusmodul , das in der TeamsJS-Referenz verfügbar ist.
Der
app.lifecycle.registerBeforeSuspendOrTerminateHandler bietet Ihnen die Möglichkeit, einige Aufgaben auszuführen, bevor Ihre App angehalten oder beendet wird, während aufgerufenapp.lifecycle.registerOnResumeHandlerwird, wenn ein Benutzer zurück zu Ihrer App navigiert.Die Registrierung beider Handler ermöglicht eine App für das Anhalten von Apps, aber es ist wichtig zu verstehen, dass die Registrierung nicht garantiert, dass die App nicht im Hintergrund beendet wird. Ob eine App beendet wird, hängt von anderen Faktoren wie dem verfügbaren Arbeitsspeicher ab.
Hinweis
Zuvor
teamsCore.registerBeforeUnloadHandlerwurden undteamsCore.registerOnLoadHandlerverwendet, um das Zwischenspeichern von Apps zu aktivieren, aber sie sind jetzt veraltet.Verwenden Sie
contentUrlundentityIdwerden an den Fortsetzungshandler übergeben, um an die richtige Seite in Ihrer App weiterzuleiten und den Host aufzurufennotifySuccessodernotifyFailurezu benachrichtigen, dass der App-Initialisierungsflow abgeschlossen ist.- contentUrl: Inhaltsseiten-URL hinzufügen.
- entityId: Fügen Sie einen eindeutigen Bezeichner hinzu.
Löschen Sie Ressourcen, und führen Sie alle im Handler erforderlichen
beforeSuspendOrTerminateBereinigungen durch.
Das folgende Flussdiagramm zeigt den ersten Start einer App, die sich für das Anhalten der App entscheiden möchte (registrieren Sie die resume Handler oder beforeSuspensionOrTerminate beim ersten Start der App):
Das folgende Flussdiagramm zeigt den Start angehaltener Apps:
Wenn Sie sich für das Anhalten der App entscheiden, wird der iFrame oder die Webansicht, die zum Hosten der eingebetteten App verwendet wird, wiederverwendet, wenn Benutzer innerhalb eines Fensters zu verschiedenen Instanzen der App navigieren. Der zum Hosten der App verwendete iFrame oder Webview wird ausgeblendet, wenn die Benutzer die App verlassen und angezeigt, wenn die Benutzer zur App zurückkehren.
Hinweis
Wenn das Anhalten der App nicht aktiviert ist, wird der iFrame oder die Webansicht jedes Mal neu erstellt, wenn der Benutzer die App startet.
Es gibt mehrere Gründe dafür, dass eine App nicht angehalten wird oder dass eine App aus dem Cache entfernt wird. Einige allgemeine Gründe für Microsoft 365-Apps sind:
- Die Gesamtauslastung des Arbeitsspeichers ist hoch.
- Die Gesamtzahl der angehaltenen Apps überschreitet die maximale Cachegröße. In diesem Fall wird die älteste angehaltene App entfernt.
- Die App wird beendet, wenn der verfügbare Arbeitsspeicher des Computers gering ist.
- Die App wird lange angehalten, ohne fortgesetzt zu werden.
- Die App kann nicht geladen werden und wird beendet.
Innerhalb der Teams-App gibt es einige der Gründe (die hier aufgeführten Zahlen können sich ändern):
- Wenn die Systemarbeitsspeicherauslastung hoch ist, wird die App aus dem Cache entfernt.
- Die App wird beendet, wenn Teams das
readyToUnloadSignal nicht innerhalb von 30 Sekunden nach dem Senden derbeforeUnloadBenachrichtigung von TeamsJS empfängt. - Das Anhalten der App ist deaktiviert, wenn der Systemarbeitsspeicher kleiner als 4 GB ist oder wenn der verfügbare Arbeitsspeicher unter Windows weniger als 1 GB oder 512 MB auf dem Mac beträgt.
- Der Seitenbereich ist der einzige unterstützte frameContext für das Anhalten von Apps in Besprechungen.
- Das Anhalten von Apps wird nicht für Besprechungen unterstützt, bei denen die Anzahl der eingeladenen Benutzer mehr als 20 beträgt.
- Unter iOS wird die App aus dem Cache entfernt, wenn die Teams-App beendet wird.
Code example
Der folgende Codeausschnitt ist ein Beispiel für - und app.lifecycle.registerBeforeSuspendOrTerminateHandler -app.lifecycle.registerOnResumeHandlerAPIs:
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
});
Hinweis
Zuvor wurden APIs im Modul verwendet, um das teamsCore Zwischenspeichern von Apps zu aktivieren. Wenn eine App sowohl für als auch app.lifecycleteamsCore für Handlerpaare registriert wird, überschreiben die app.lifecycle Handler die teamsCore Handler.
Debugtool für zwischengespeicherte Apps
Hinweis
Das Debugtool für zwischengespeicherte Apps ist in der öffentlichen Entwicklervorschau für Teams-Apps verfügbar.
Sie können den Proto-Task-Manager in Teams aktivieren, ein Debugtool, das die status Ihrer zwischengespeicherten Apps anzeigt. Wählen Sie in Ihrem Teams-Client die Tasten CTRL+UMSCHALT+ALT+8 unter Windows oder BEFEHL+UMSCHALT+WAHL+8 auf dem Mac aus, um den Proto-Task-Manager zu öffnen.
Die Registerkarte AppCaching enthält die folgenden Details:
- state: Zeigt den zwischengespeicherten oder nicht zwischengespeicherten Zustand der App an.
- isActive: Zeigt die aktive oder inaktive status der zwischengespeicherten App an.
- timeElapsed: Zeigt die Zeit an, die seit dem Zwischenspeichern der App verstrichen ist.
-
supportsLoad: Zeigt an, ob die App den
LoadHandler registriert hat, wenn das Zwischenspeichern von Apps aktiviert ist. -
supportsBeforeUnload: Zeigt an, ob die App den Handler registriert hat, wenn das
BeforeUnloadZwischenspeichern von Apps aktiviert ist. - totalFrameMemory: Zeigt die Speicherauslastung der App an.
- totalFrameCommitMemory: Zeigt die CPU-Auslastung der App an.
Vorbereiten von Registerkarten-Apps
Hinweis
Vorbereiten von Registerkarten-Apps wird nur in Teams-Web- und Desktopclients unterstützt.
Während die Zwischenspeicherung die nachfolgenden Ladezeiten einer App reduziert, optimiert das Vorabspeichern die anfängliche Ladezeit einer App, indem Teams das Vorabladen der App ermöglicht. Teams laden Apps nach dem Start oder im Leerlauf vorab im Hintergrund, basierend auf den aktuellen App-Nutzungsmustern der Benutzer und dem Cacheverlauf der Apps. Die vorab geladenen Apps bleiben zwischengespeichert, bis der Benutzer die App öffnet, was zu einer schnelleren Ladezeit führt.
Wenn Sie precaching aktivieren, nutzt Ihre App Ressourcen, und Telemetriedaten werden nachverfolgt, während sich der Zustand vorab zwischengespeichert befindet. Informationen zum Optimieren Ihrer App für die Voraberstellung finden Sie unter Bewährte Methoden.
Aktivieren der Vorcaching für Registerkarten-Apps
Führen Sie die folgenden Schritte aus, um precaching für Ihre Registerkarten-App zu aktivieren:
Aktualisieren Sie Ihr App-Manifest wie folgt:
Legen Sie den Wert von
showLoadingIndicatorauf festtrue. Durch diese Aktion wird sichergestellt, dass Teams wartet, bis Ihre App sendetnotifySuccess, um die App-Ladesequenz während des Vorcachings abzuschließen. Weitere Informationen finden Sie unter showLoadingIndicator.Fügen Sie das
backgroundLoadConfiguration-Objekt hinzu, und definieren Sie .contentUrl{ "backgroundLoadConfiguration": { "tabConfiguration": { "contentUrl": "https://www.contoso.com/content?host=msteams&isBackgroundLoad=true" } } }Hinweis
- Die
contentUrldarf keine kontextspezifischen Parameter enthalten, z. B. teamwebsite-URL oder Thread-ID, da Teams Apps ohne vorherigen Kontext während des Starts lädt. - Muss
contentUrlgenerisch genug sein, um ohne Benutzerinteraktion im Hintergrund geladen zu werden.
Weitere Informationen finden Sie unter backgroundLoadConfiguration.
- Die
Überwachen des Ladens im Hintergrund
Sie können feststellen, ob Teams die App ohne Benutzerinteraktion im Hintergrund geladen hat, wenn Sie die isBackgroundLoad -Eigenschaft überwachen. Wenn der Zustand der Eigenschaft lautet true, gibt dies an, dass Teams die App im Hintergrund geladen hat und nicht mit dem Benutzer interagieren kann. Daher muss die App keine Benutzeroberflächenelemente wie Anmeldeaufforderungen rendern.
Überwachen Sie die isBackgroundLoad -Eigenschaft im App-Kontext, um die App für effektives Laden und Rendern vor dem Zwischenspeichern zu optimieren. Weitere Informationen finden Sie unter isBackgroundLoad.
Bewährte Methoden
Im Folgenden sind die bewährten Methoden für das Anhalten und Vorbereiten von Apps aufgeführt:
Es wird empfohlen, Webspeicher- oder Service Workerfunktionen zu implementieren, um die Daten oder webview lokal zu speichern. Diese Strategie trägt dazu bei, die App bei nachfolgenden Starts schneller zu laden.
Registrieren Sie die Handler für das Anhalten der App zu einem frühen Zeitpunkt in Der Startsequenz, z. B. direkt nach dem Aufruf
app.initializeund vor dem SendennotifySuccessvon . Wenn dem Teams-Client diese Registrierungen nicht angezeigt werden, bevor der Benutzer die App verlässt, wird die App nicht zwischengespeichert.Versuchen Sie, den Speicherbedarf zu reduzieren, wenn der
app.lifecycle.onBeforeSuspendOrTerminateHandlerHandler aufgerufen wird und die App angehalten wird. Beispiel: Freigeben von Verweisen, Entfernen von eventListenern, Anhalten von Synchronisierungsaufrufen oder Anhalten von Netzwerkanforderungen.Precaching erhöht den Datenverkehr zu Ihrer App zusätzlich zu vom Benutzer initiierten Anforderungen. Stellen Sie sicher, dass der Endpunkt, den Sie als angeben,
contentUrlmehrmals an einem Tag Hintergrundanforderungen für jeden Benutzer verarbeiten kann. Stellen Sie sicher, dass Sie Telemetrieanpassungen vornehmen, die für das Laden im Hintergrund der App erforderlich sind.Stellen Sie sicher, dass Ihre App im vorab zwischengespeicherten Zustand weniger als oder gleich 130 MB Arbeitsspeicher verwendet.
Allgemeine Einschränkungen
Im Folgenden finden Sie allgemeine Einschränkungen für das Anhalten von Apps:
Es gibt keine Garantie, dass eine App angehalten wird. Es gibt Gründe, die zur Beendigung der App führen können, obwohl eine App die erforderlichen Handler registriert hat.
Eine App wird nur angehalten, wenn der Benutzer von der App weg navigiert. Wenn eine App über mehrere statische Registerkarten verfügt und der Benutzer zwischen Registerkarten wechselt, wird die Registerkarte nicht angehalten. Der Handler wird
app.lifecycle.onBeforeSuspendOrTerminateweiterhin aufgerufen.Die angehaltene App kann innerhalb desselben Fensters verwendet werden. Die App, die in einem Popupfenster angehalten wird, kann nicht im Hauptfenster wiederverwendet werden.
Wenn eine App angehalten wird, werden alle registrierten Handler gelöscht. Wenn die App fortgesetzt wird, müssen alle Handler, z
themeChange. B. oderfocusEnter, erneut registriert werden. Beim Anhalten werden keine Benachrichtigungen an die App gesendet. Wenn Ihre App Benachrichtigungen erfordert, auch wenn sie angehalten wird, ist das Anhalten möglicherweise nicht die richtige Lösung.Nur Single-Page-Apps, die clientseitiges Routing für die Seitennavigation verwenden, können vom Anhalten und Fortsetzen der App profitieren. Es wird empfohlen, dieselbe Domäne in allen Kontexten Ihres App-Starts zu verwenden.
Es wird erwartet, dass eine App in den Ruhezustand versetzt wird, wenn sie angehalten wird. Wenn die App angehalten wird, sind keine SDK-Anforderungen zulässig.
Die Host-App ruft den
resumeHandler erst auf, nachdem diesuspendOrTerminateSequenz der App abgeschlossen wurde. Wenn ein Benutzer beispielsweise die Registerkarte A Ihrer App startet und dann Tab B derselben App startet, erhält Tab B dasresumeSignal erst, wenn die Ausführung dessuspendOrTerminateHandlers auf Registerkarte A abgeschlossen ist.Apps werden pro Fenster zwischengespeichert. Das Zwischenspeichern von Apps erfolgt pro App (nicht pro Registerkarte) innerhalb desselben Fensters.
Die Tabelle im Einführungsabschnitt , App-Aussetzung für Ihre Registerkarten-App, enthält Informationen dazu, was
frameContextTeams für die Zwischenspeicherung unterstützt. Für Nicht-Teams-Hubs wird nurFrameContext.Contentzwischengespeichert, was bedeutet,FrameContext.Taskdass dies inDialognicht unterstützt wird.Registrieren Sie nur den
beforeSuspendOrTerminateHandler, wenn Ihre App nicht angehalten werden muss, aber Zeit zum sicheren Speichern des Zustands benötigt (da das Verlassen der App dazu führen kann, dass der App-Inhalt plötzlich aus dem Dokumentobjektmodell (DOM) entfernt wird). Wenn sich die App nicht für dasresumeEreignis registriert hat, wird sie nach Abschluss des Flows aus demsuspendOrTerminateDOM entfernt.
Einschränkungen innerhalb von Teams
Im Folgenden sind die Einschränkungen für das Anhalten von Apps innerhalb der Teams-App aufgeführt:
Der Teams-Client ruft den
resumeHandler erst auf, nachdem diesuspendOrTerminateSequenz der App abgeschlossen wurde. Wenn ein Benutzer beispielsweise Registerkarte A Ihrer App startet und dann Tab B derselben App startet, erhält Tab B dasresumeSignal erst, wenn die Ausführung dessuspendOrTerminateHandlers auf Registerkarte A abgeschlossen ist.Das Anhalten von Apps wird für Besprechungsphasen- oder Dialogkontexte (in TeamsJS v1.x als Aufgabenmodul bezeichnet) nicht unterstützt, da sie oben auf der Registerkarte geöffnet werden können und derselbe iFrame oder dieselbe Webansicht nicht zum Rendern des Inhalts auf der Registerkarte und im Dialogfeld verwendet werden kann.
Befolgen Sie die Richtlinien in diesem Abschnitt, um das Onboarding Ihrer App für das Anhalten von Apps in der Teams-Besprechung durchzuführen. Registrieren Sie zur Unterstützung des Anhaltens von Apps nur in Besprechungen die
resumeHandler oderbeforeSuspendOrTerminate, wenn der Kontext istsidePanel.
Problembehandlung
Apps werden nicht angehalten? Warum wird der Resume-Handler bei der nachfolgenden Navigation nicht aufgerufen?
Überprüfen Sie, ob die System- und verfügbaren Arbeitsspeichereinschränkungen erfüllt sind.
Reduzieren Sie den Speicherbedarf beim Zwischenspeichern. Verwenden Sie den
beforeSuspendOrTerminateHandler, um Ressourcen zu löschen, z. B. Freigeben von Verweisen und Entfernen von Ereignislistenern, die beim Zwischenspeichern möglicherweise nicht benötigt werden.
Codebeispiel
| Beispielname | Beschreibung | Node.js |
|---|---|---|
| Zwischenspeichern von Apps | In diesem Beispiel wird gezeigt, wie Sie die Ladezeiten von Apps während Besprechungen durch zwischenspeichern und so die Benutzererfahrung in Microsoft Teams verbessern. | Anzeigen |