Im Multi-Window-Modus können mehrere Apps gleichzeitig auf demselben Bildschirm angezeigt werden. Apps können nebeneinander oder übereinander (Splitscreen-Modus), eine App in einem kleinen Fenster über anderen Apps (Bild-im-Bild-Modus) oder einzelne Apps in separaten, verschiebbaren und in der Größe anpassbaren Fenstern (Desktop-Fenstermodus) angezeigt werden.
Eine Anleitung dazu, wie Nutzer auf Smartphones auf den Splitscreen-Modus zugreifen können, finden Sie unter Zwei Apps gleichzeitig anzeigen lassen – Pixel.
Versionsspezifische Mehrfensterfunktionen
Die Nutzung von mehreren Fenstern hängt von der Android-Version und dem Gerätetyp ab:
Mit Android 7.0 (API-Level 24) wurde der Splitscreen-Modus auf Geräten mit kleinen Displays und der Bild-im-Bild-Modus auf ausgewählten Geräten eingeführt.
Im Splitscreen-Modus werden zwei Apps auf dem Display angezeigt, entweder nebeneinander oder übereinander. Nutzer können die Trennlinie zwischen den beiden Apps ziehen, um eine App zu vergrößern und die andere zu verkleinern.
Im Bild-im-Bild-Modus können Nutzer die Videowiedergabe fortsetzen, während sie mit einer anderen App interagieren (siehe Unterstützung von „Bild im Bild“).
Der Desktop-Fenstermodus, in dem Nutzer die Größe jeder Aktivität frei ändern können, kann von Herstellern von Geräten mit großem Bildschirm aktiviert werden.
Sie können konfigurieren, wie Ihre App den Mehrfenstermodus verarbeitet, indem Sie die minimal zulässigen Abmessungen Ihrer Aktivität angeben. Sie können den Mehrfenstermodus für Ihre App auch deaktivieren, indem Sie
resizeableActivity="false"
festlegen. So wird Ihre App immer im Vollbildmodus angezeigt.
Mit Android 8.0 (API-Level 26) wird der Bild-im-Bild-Modus auf Geräte mit kleinen Displays ausgeweitet.
Unter Android 12 (API-Level 31) ist der Mehrfenstermodus das Standardverhalten.
Auf großen Bildschirmen (mittelgroße oder erweiterte Fenstergrößenklasse) unterstützt die Plattform alle Apps im Mehrfenstermodus, unabhängig von der App-Konfiguration. Wenn
resizeableActivity="false"
, wird die App bei Bedarf in den Kompatibilitätsmodus versetzt, um die Displayabmessungen zu berücksichtigen.Auf kleinen Bildschirmen (Fenstergrößenklasse compact) prüft das System die
minWidth
undminHeight
einer Aktivität, um festzustellen, ob die Aktivität im Mehrfenstermodus ausgeführt werden kann. WennresizeableActivity="false"
, kann die App unabhängig von der Mindestbreite und ‑höhe nicht im Multi-Window-Modus ausgeführt werden.
Unter Android 16 (API‑Level 36) werden Einschränkungen für die Bildschirmausrichtung, das Seitenverhältnis und die Anpassbarkeit der Größe überschrieben.
Auf großen Bildschirmen (kleinste Breite >= 600 dp) ignoriert das System Manifestattribute und Runtime-APIs, die zur Einschränkung der Ausrichtung, des Seitenverhältnisses und der Größe einer App verwendet werden. So wird die Nutzerfreundlichkeit auf allen Geräteformfaktoren optimiert.
Informationen dazu, wie Sie Spiele von den Änderungen in Android 16 ausschließen, finden Sie unter Ausnahmen für Ausrichtung, Seitenverhältnis und Anpassbarkeit von Apps.
Splitscreen-Modus
Nutzer aktivieren den Splitscreen-Modus so:
- Bildschirm „Letzte Apps“ öffnen
- App in den Ansichtsbereich wischen
- Drücken Sie in der Titelleiste der App auf das App-Symbol.
- Splitscreen-Menüoption auswählen
- Wählen Sie eine andere App auf dem Bildschirm „Letzte Apps“ aus oder schließen Sie den Bildschirm „Letzte Apps“ und starten Sie eine andere App.
Nutzer beenden den Splitscreen-Modus, indem sie die Fensterteilung an den Bildschirmrand ziehen – nach oben oder unten, links oder rechts.
Nebenan starten
Wenn Ihre App über einen Intent auf Inhalte zugreifen muss, können Sie FLAG_ACTIVITY_LAUNCH_ADJACENT
verwenden, um die Inhalte in einem angrenzenden Split-Screen-Fenster zu öffnen.
FLAG_ACTIVITY_LAUNCH_ADJACENT
wurde in Android 7.0 (API-Level 24) eingeführt, damit Apps, die im Modus für geteilten Bildschirm ausgeführt werden, Aktivitäten im angrenzenden Fenster starten können.
In Android 12L (API‑Level 32) und höher wurde die Definition des Flags erweitert, damit Apps, die im Vollbildmodus ausgeführt werden, den Splitscreen-Modus aktivieren und dann Aktivitäten im angrenzenden Fenster starten können.
Wenn Sie eine angrenzende Aktivität starten möchten, verwenden Sie FLAG_ACTIVITY_LAUNCH_ADJACENT
in Verbindung mit FLAG_ACTIVITY_NEW_TASK
, z. B.:
fun openUrlInAdjacentWindow(url: String) {
Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url)
addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or Intent.FLAG_ACTIVITY_NEW_TASK)
}.also { intent -> startActivity(intent) }
}
Aktivitätslebenszyklus im Mehrfenstermodus
Der Mehrfenstermodus ändert den Aktivitätslebenszyklus nicht. Der Status „Aktiviert“ von Apps in mehreren Fenstern unterscheidet sich jedoch je nach Android-Version.
Multi-Resume
Android 10 (API-Level 29) und höhere Versionen unterstützen Multi-Resume. Alle Aktivitäten bleiben im Status RESUMED
, wenn sich das Gerät im Mehrfenstermodus befindet. Eine Aktivität kann pausiert werden, wenn sich eine transparente Aktivität darüber befindet oder die Aktivität nicht fokussierbar ist, z. B. wenn sie sich im Bild-im-Bild-Modus befindet. Es ist auch möglich, dass zu einem bestimmten Zeitpunkt keine Aktivität im Fokus steht, z. B. wenn die Benachrichtigungsleiste geöffnet ist. Die Methode onStop()
funktioniert wie gewohnt: Sie wird immer dann aufgerufen, wenn eine Aktivität vom Bildschirm entfernt wird.
Multi-Resume ist auch auf ausgewählten Geräten mit Android 9 (API-Level 28) verfügbar. Wenn Sie die Funktion „Multi-Resume“ auf Geräten mit Android 9 aktivieren möchten, fügen Sie die folgenden Manifestmetadaten hinzu:
<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />
Ob ein bestimmtes Gerät diese Manifestmetadaten unterstützt, erfahren Sie in den Gerätespezifikationen.
Android 9
Im Mehrfenstermodus unter Android 9 (API-Ebene 28) und niedriger ist zu einem bestimmten Zeitpunkt nur die Aktivität aktiv, mit der der Nutzer zuletzt interagiert hat. Diese Aktivität gilt als oberste und ist die einzige Aktivität im Status RESUMED
. Alle anderen sichtbaren Aktivitäten sind STARTED
, aber nicht RESUMED
.
Das System gibt diesen sichtbaren, aber nicht fortgesetzten Aktivitäten jedoch eine höhere Priorität als Aktivitäten, die nicht sichtbar sind. Wenn der Nutzer mit einer der sichtbaren Aktivitäten interagiert, wird diese Aktivität fortgesetzt und die zuvor oberste Aktivität wechselt in den Status STARTED
.
Wenn es mehrere Aktivitäten in einem einzelnen aktiven App-Prozess gibt, wird die Aktivität mit der höchsten Z-Reihenfolge fortgesetzt und die anderen werden pausiert.
Konfigurationsänderungen
Wenn der Nutzer eine App in den Mehrfenstermodus versetzt, benachrichtigt das System die Aktivität über eine Konfigurationsänderung, wie unter Konfigurationsänderungen verarbeiten beschrieben. Das passiert auch, wenn der Nutzer die Größe der App ändert oder die App wieder in den Vollbildmodus versetzt.
Im Wesentlichen hat diese Änderung die gleichen Auswirkungen auf den Aktivitätslebenszyklus wie wenn das System die App darüber informiert, dass das Gerät von Hoch- auf Querformat umgestellt wurde. Der einzige Unterschied besteht darin, dass die App-Dimensionen geändert werden, anstatt nur getauscht zu werden. Ihre Aktivität kann die Konfigurationsänderung selbst verarbeiten oder Ihre App kann dem System erlauben, die Aktivität zu beenden und mit den neuen Abmessungen neu zu erstellen.
Wenn der Nutzer die Größe eines Fensters ändert und es in einer der beiden Dimensionen vergrößert, passt das System die Größe der Aktivität an die Nutzeraktion an und nimmt bei Bedarf Konfigurationsänderungen vor. Wenn die App beim Zeichnen neu freigelegter Bereiche hinterherhinkt, füllt das System diese Bereiche vorübergehend mit der Farbe, die durch das Attribut windowBackground
oder durch das Standardstilattribut windowBackgroundFallback
angegeben wird.
Exklusiver Zugriff auf Ressourcen
Verwenden Sie den Lebenszyklus-Callback onTopResumedActivityChanged()
, um die Funktion für die Fortsetzung der Wiedergabe zu unterstützen.
Der Callback wird aufgerufen, wenn eine Aktivität die Position der obersten fortgesetzten Aktivität erhält oder verliert. Das ist wichtig, wenn eine Aktivität eine gemeinsam genutzte Singleton-Ressource wie das Mikrofon oder die Kamera verwendet:
override fun onTopResumedActivityChanged(topResumed: Boolean) {
if (topResumed) {
// Top resumed activity.
// Can be a signal to re-acquire exclusive resources.
} else {
// No longer the top resumed activity.
}
}
Eine App kann auch aus anderen Gründen Ressourcen verlieren, z. B. wenn ein gemeinsames Hardwareteil entfernt wird.
In jedem Fall sollte eine App Ereignisse und Statusänderungen, die sich auf verfügbare Ressourcen auswirken, ordnungsgemäß verarbeiten.
Bei Apps, die eine Kamera verwenden, gibt CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged()
einen Hinweis darauf, dass es ein guter Zeitpunkt sein könnte, auf die Kamera zuzugreifen.
Diese Methode ist ab Android 10 (API-Level 29) verfügbar.
resizeableActivity=false
bietet keine Garantie für den exklusiven Kamerazugriff, da andere Apps, die die Kamera verwenden, auf anderen Displays geöffnet werden können.

Ihre App muss die Kamera nicht unbedingt freigeben, wenn sie den Fokus verliert. Beispielsweise möchten Sie möglicherweise die Kameravorschau fortsetzen, während der Nutzer mit der neu fokussierten, obersten fortgesetzten App interagiert. Es ist in Ordnung, wenn Ihre App die Kamera weiter ausführt, wenn sie nicht die oberste fortgesetzte App ist, aber sie muss die Trennung ordnungsgemäß verarbeiten. Wenn die oberste fortgesetzte App die Kamera verwenden möchte, kann sie sie öffnen und Ihre App verliert den Zugriff. Ihre App kann die Kamera wieder öffnen, wenn sie wieder den Fokus erhält.
Nachdem eine App einen CameraDevice.StateCallback#onDisconnected()
-Callback empfangen hat, wird bei nachfolgenden Aufrufen des Kamerageräts eine CameraAccessException
ausgelöst.
Messwerte für das Fenster
In Android 11 (API‑Level 30) wurden die folgenden WindowManager
-Methoden eingeführt, um die Grenzen von Apps bereitzustellen, die im Mehrfenstermodus ausgeführt werden:
getCurrentWindowMetrics()
: Gibt einWindowMetrics
-Objekt für den aktuellen Fensterstatus des Systems zurück.getMaximumWindowMetrics()
: GibtWindowMetrics
für den größten potenziellen Fensterstatus des Systems zurück.
Die Jetpack WindowManager-Bibliotheksmethoden computeCurrentWindowMetrics()
und computeMaximumWindowMetrics()
bieten ähnliche Funktionen, sind aber abwärtskompatibel bis API-Level 14.
So rufen Sie Messwerte für andere Displays als das aktuelle Display ab (wie im Code-Snippet gezeigt):
- Displaykontext erstellen
- Fensterkontext für die Anzeige erstellen
WindowManager
des Fensterkontexts abrufenWindowMetrics
des maximalen Anzeigebereichs abrufen, der für die App verfügbar ist
val windowMetrics = context.createDisplayContext(display)
.createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
.getSystemService(WindowManager::class.java)
.maximumWindowMetrics
Eingestellte Methoden
Die Display
-Methoden getSize()
und getMetrics()
wurden in API-Level 30 zugunsten der neuen WindowManager
-Methoden eingestellt.
In Android 12 (API‑Level 31) werden die Display
-Methoden getRealSize()
und getRealMetrics()
eingestellt und ihr Verhalten wird so aktualisiert, dass es dem Verhalten von getMaximumWindowMetrics()
ähnelt.
Konfiguration des Mehrfenstermodus
Wenn Ihre App auf Android 7.0 (API‑Level 24) oder höher ausgerichtet ist, können Sie konfigurieren, wie und ob die Aktivitäten Ihrer App den Mehrfenstermodus unterstützen. Sie können Attribute in Ihrem Manifest festlegen, um sowohl die Größe als auch das Layout zu steuern. Die Attributseinstellungen einer Stammaktivität gelten für alle Aktivitäten im zugehörigen Task-Stack. Wenn die Stammaktivität beispielsweise android:resizeableActivity="true"
hat, können alle Aktivitäten im Task-Stack in der Größe angepasst werden. Auf einigen größeren Geräten wie Chromebooks wird Ihre App möglicherweise in einem Fenster mit variabler Größe ausgeführt, auch wenn Sie android:resizeableActivity="false"
angeben. Wenn dies zu Problemen mit Ihrer App führt, können Sie Filter bei Google Play verwenden, um die Verfügbarkeit Ihrer App auf solchen Geräten einzuschränken.
Unter Android 12 (API-Level 31) wird standardmäßig der Mehrfenstermodus verwendet. Auf großen Displays (mittel oder erweitert) werden alle Apps unabhängig von der App-Konfiguration im Multi-Window-Modus ausgeführt. Auf kleinen Bildschirmen prüft das System die Einstellungen minWidth
, minHeight
und resizeableActivity
einer Aktivität, um festzustellen, ob die Aktivität im Mehrfenstermodus ausgeführt werden kann.
resizeableActivity
Legen Sie dieses Attribut im Element <activity>
oder <application>
des Manifests fest, um den Mehrfenstermodus für API-Level 30 und niedriger zu aktivieren oder zu deaktivieren:
<application
android:name=".MyActivity"
android:resizeableActivity=["true" | "false"] />;
Wenn dieses Attribut auf true
festgelegt ist, kann die Aktivität im Splitscreen- und Desktop-Fenstermodus gestartet werden. Wenn das Attribut auf false
gesetzt ist, unterstützt die Aktivität den Mehrfenstermodus nicht. Wenn der Wert „false“ ist und der Nutzer versucht, die Aktivität im Mehrfenstermodus zu starten, wird die Aktivität im Vollbildmodus angezeigt.
Wenn Ihre App auf API‑Level 24 oder höher ausgerichtet ist, Sie aber keinen Wert für dieses Attribut angeben, wird der Wert des Attributs standardmäßig auf „true“ gesetzt.
Wenn Ihre App auf API‑Level 31 oder höher ausgerichtet ist, funktioniert dieses Attribut auf kleinen und großen Bildschirmen unterschiedlich:
- Große Displays (mittel oder erweitert): Alle Apps unterstützen den Multi-Window-Modus. Das Attribut gibt an, ob die Größe einer Aktivität geändert werden kann. Wenn
resizeableActivity="false"
, wird die App bei Bedarf in den Kompatibilitätsmodus versetzt, um den Displayabmessungen zu entsprechen. - Kleine Bildschirme (Fenstergrößenklasse kompakt): Wenn
resizeableActivity="true"
sowie die Mindestbreite und ‑höhe der Aktivität den Anforderungen für den Multi-Window-Modus entsprechen, wird der Multi-Window-Modus von der Aktivität unterstützt. WennresizeableActivity="false"
, unterstützt die Aktivität den Mehrfenstermodus unabhängig von der Mindestbreite und ‑höhe der Aktivität nicht.
Wenn Ihre App auf API‑Level 36 oder höher ausgerichtet ist, wird dieses Attribut auf Displays mit einer Mindestbreite von mindestens 600 dp ignoriert. Die App berücksichtigt jedoch vollständig die vom Nutzer gewählte Seitenverhältnis-Überschreibung (siehe Nutzerüberschreibungen pro App).
Wenn Sie ein Spiel entwickeln, finden Sie unter Ausrichtung, Seitenverhältnis und Anpassbarkeit von Apps Informationen dazu, wie Sie Ihr Spiel von den Änderungen für Android 16 (API-Ebene 36) ausschließen können.
supportsPictureInPicture
Legen Sie dieses Attribut im <activity>
-Knoten Ihres Manifests fest, um anzugeben, ob die Aktivität den Bild-im-Bild-Modus unterstützt.
<activity
android:name=".MyActivity"
android:supportsPictureInPicture=["true" | "false"] />
configChanges
Wenn Sie Konfigurationsänderungen im Mehrfenstermodus selbst verarbeiten möchten, z. B. wenn ein Nutzer die Größe eines Fensters ändert, fügen Sie dem <activity>
-Knoten im App-Manifest das Attribut android:configChanges
mit mindestens den folgenden Werten hinzu:
<activity
android:name=".MyActivity"
android:configChanges="screenSize | smallestScreenSize
| screenLayout | orientation" />
Nachdem Sie android:configChanges
hinzugefügt haben, erhalten Ihre Aktivitäten und Fragmente einen Callback an onConfigurationChanged()
, anstatt zerstört und neu erstellt zu werden. Anschließend können Sie Ihre Ansichten manuell aktualisieren, Ressourcen neu laden und bei Bedarf andere Vorgänge ausführen.
<layout>
Unter Android 7.0 (API-Level 24) und höher unterstützt das Manifestelement <layout>
mehrere Attribute, die sich auf das Verhalten einer Aktivität im Mehrfenstermodus auswirken:
android:defaultHeight
,android:defaultWidth
: Standardhöhe und ‑breite der Aktivität beim Starten im Desktop-Freiform-Fenstermodus.android:gravity
: Die anfängliche Platzierung der Aktivität beim Starten im Desktop-Fenstermodus. Geeignete Werte finden Sie in der KlasseGravity
.android:minHeight
,android:minWidth
: Mindesthöhe und ‑breite für die Aktivität im Split-Screen- und Desktop-Fenstermodus. Wenn der Nutzer die Trennlinie im Splitscreen-Modus verschiebt, um eine Aktivität kleiner als das angegebene Minimum zu machen, schneidet das System die Aktivität auf die vom Nutzer gewünschte Größe zu.
Der folgende Code zeigt, wie die Standardgröße und der Standardort einer Aktivität sowie ihre Mindestgröße angegeben werden, wenn die Aktivität im Desktop-Fenstermodus angezeigt wird:
<activity android:name=".MyActivity">
<layout android:defaultHeight="500dp"
android:defaultWidth="600dp"
android:gravity="top|end|..."
android:minHeight="450dp"
android:minWidth="300dp" />
</activity>
Mehrfenstermodus zur Laufzeit
Ab Android 7.0 bietet das System Funktionen zur Unterstützung von Apps, die im Mehrfenstermodus ausgeführt werden können.
Deaktivierte Funktionen im Mehrfenstermodus
Im Mehrfenstermodus werden Funktionen, die nicht für eine Aktivität gelten, die den Gerätebildschirm mit anderen Aktivitäten oder Apps teilt, möglicherweise von Android deaktiviert oder ignoriert.
Außerdem sind einige Optionen zur Anpassung der System-UI deaktiviert. Apps können beispielsweise die Statusleiste nicht ausblenden, wenn sie im Mehrfenstermodus ausgeführt werden (siehe Sichtbarkeit der System-UI steuern).
Änderungen am Attribut android:screenOrientation
werden vom System ignoriert.
Abfragen und Rückrufe im Mehrfenstermodus
Die Klasse Activity
bietet die folgenden Methoden zur Unterstützung des Mehrfenstermodus:
isInMultiWindowMode()
: Gibt an, ob sich die Aktivität im Mehrfenstermodus befindet.isInPictureInPictureMode()
: Gibt an, ob sich die Aktivität im Bild-im-Bild-Modus befindet.onMultiWindowModeChanged()
: Das System ruft diese Methode immer dann auf, wenn die Aktivität in den oder aus dem Mehrfenstermodus wechselt. Das System übergibt der Methode den Wert „true“, wenn die Aktivität in den Mehrfenstermodus wechselt, oder „false“, wenn die Aktivität den Mehrfenstermodus verlässt.onPictureInPictureModeChanged()
: Das System ruft diese Methode auf, wenn die Aktivität in den oder aus dem Bild-im-Bild-Modus wechselt. Das System übergibt der Methode den Wert „true“, wenn die Aktivität in den Bild-im-Bild-Modus wechselt, oder „false“, wenn die Aktivität den Bild-im-Bild-Modus verlässt.
Die Klasse Fragment
stellt Versionen vieler dieser Methoden bereit, z. B. Fragment.onMultiWindowModeChanged()
.
Bild-im-Bild-Modus
Rufen Sie enterPictureInPictureMode()
auf, um eine Aktivität in den Bild-im-Bild-Modus zu versetzen. Diese Methode hat keine Auswirkungen, wenn das Gerät den Bild-im-Bild-Modus nicht unterstützt. Weitere Informationen finden Sie unter Videos im Bild-im-Bild-Modus (BiB) hinzufügen.
Neue Aktivitäten im Mehrfenstermodus
Wenn Sie eine neue Aktivität starten, können Sie angeben, dass sie nach Möglichkeit neben der aktuellen Aktivität angezeigt werden soll. Verwenden Sie das Intent-Flag FLAG_ACTIVITY_LAUNCH_ADJACENT
. Damit wird das System angewiesen, die neue Aktivität in einem angrenzenden Fenster zu erstellen, sodass sich die beiden Aktivitäten den Bildschirm teilen. Das System unternimmt alles, um dies zu tun, aber es kann nicht garantiert werden.
Wenn sich ein Gerät im Desktop-Fenstermodus befindet und Sie eine neue Aktivität starten, können Sie die Abmessungen und die Bildschirmposition der neuen Aktivität angeben, indem Sie ActivityOptions.setLaunchBounds()
aufrufen. Die Methode hat keine Auswirkungen, wenn sich das Gerät nicht im Mehrfenstermodus befindet.
Wenn Sie auf API-Ebene 30 und niedriger eine Aktivität in einem Task-Stack starten, wird die Aktivität auf dem Bildschirm durch die neue Aktivität ersetzt und übernimmt alle ihre Eigenschaften für die Mehrfensterdarstellung. Wenn Sie die neue Aktivität als separates Fenster im Mehrfenstermodus starten möchten, müssen Sie sie in einem neuen Task-Stack starten.
Unter Android 12 (API-Level 31) können Apps das Aufgabenfenster einer Anwendung auf mehrere Aktivitäten aufteilen. Sie legen fest, wie die Aktivitäten Ihrer App angezeigt werden – im Vollbildmodus, nebeneinander oder gestapelt –, indem Sie eine XML-Konfigurationsdatei erstellen oder Jetpack WindowManager API-Aufrufe ausführen.
Drag-and-drop
Nutzer können Daten per Drag-and-drop von einer Aktivität in eine andere ziehen, während die beiden Aktivitäten auf dem Bildschirm angezeigt werden. Vor Android 7.0 konnten Nutzer Daten nur innerhalb einer einzelnen Aktivität per Drag-and-drop verschieben. Mit der DropHelper
API können Sie schnell Unterstützung für das Akzeptieren von abgelegten Inhalten hinzufügen. Eine umfassende Anleitung zum Drag-and-drop-Verfahren finden Sie unter Drag-and-drop aktivieren.
Multi-Instanz
Jede Stammaktivität hat eine eigene Aufgabe, die in einem eigenen Fenster angezeigt wird. Wenn Sie eine neue Instanz Ihrer App in einem separaten Fenster starten möchten, starten Sie neue Aktivitäten mit dem Flag FLAG_ACTIVITY_NEW_TASK
. Sie können diese Einstellung mit Attributen für mehrere Fenster kombinieren, um einen bestimmten Ort für das neue Fenster anzufordern. So kann eine Shopping-App beispielsweise mehrere nebeneinanderliegende Fenster anzeigen, um Produkte zu vergleichen.
Unter Android 12 (API‑Level 31) und höher können Sie mit Activity Embedding zwei Instanzen einer Aktivität nebeneinander im selben Aufgabenfenster starten.
Wenn Sie Nutzern erlauben möchten, eine weitere Instanz Ihrer Anwendung über den App-Launcher oder die Taskleiste zu starten, legen Sie android:resizeableActivity="true"
im Manifest Ihrer Launcher-Aktivität fest und verwenden Sie keinen Startmodus, der mehrere Instanzen verhindert. Eine singleInstancePerTask
-Aktivität kann beispielsweise in verschiedenen Aufgaben mehrmals instanziiert werden, wenn FLAG_ACTIVITY_MULTIPLE_TASK
oder FLAG_ACTIVITY_NEW_DOCUMENT
festgelegt ist.
Unter Android 15 (API‑Level 35) und höher können Sie mit PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI
Unterstützung für mehrere Instanzen deklarieren. Die Eigenschaft ist ein explizites Signal für die System-UI, um dem Nutzer Steuerelemente zum Erstellen mehrerer Instanzen der App zur Verfügung zu stellen. Die Eigenschaft ist unabhängig vom Startmodus, sollte aber nur verwendet werden, wenn der Startmodus für eine Aktivität oder Anwendung mit der Eigenschaft kompatibel ist, z. B. wenn der Startmodus nicht singleInstance
ist.
Wenn auf einem faltbaren Gerät mehrere Instanzen einer App in separaten Fenstern ausgeführt werden, werden eine oder mehrere Instanzen möglicherweise in den Hintergrund verschoben, wenn sich die Geräteausrichtung ändert. Angenommen, ein Gerät ist aufgeklappt und auf jeder Seite der Faltstelle werden zwei App-Instanzen in separaten Fenstern ausgeführt. Wenn das Gerät zusammengeklappt ist, wird möglicherweise eine der Instanzen beendet, anstatt die Fenster für beide Instanzen auf einem kleineren Bildschirm anzuzeigen.
Überprüfung des Mehrfenstermodus
Unabhängig davon, ob Ihre App auf API-Level 24 oder höher ausgerichtet ist, sollten Sie prüfen, wie sie sich im Mehrfenstermodus verhält, falls ein Nutzer versucht, sie auf einem Gerät mit Android 7.0 oder höher im Mehrfenstermodus zu starten.
Testgeräte
Geräte mit Android 7.0 (API-Level 24) oder höher unterstützen den Mehrfenstermodus.
API‑Level 23 oder niedriger
Wenn Nutzer versuchen, die App im Mehrfenstermodus zu verwenden, wird die Größe der App vom System angepasst, sofern die App keine feste Ausrichtung deklariert.
Wenn in Ihrer App keine feste Ausrichtung deklariert ist, sollten Sie sie auf einem Gerät mit Android 7.0 oder höher starten und versuchen, sie in den Splitscreen-Modus zu versetzen. Prüfen Sie, ob die Nutzerfreundlichkeit akzeptabel ist, wenn die Größe der App erzwungen wird.
Wenn die App eine feste Ausrichtung deklariert, sollten Sie versuchen, die App in den Multi-Window-Modus zu versetzen. Prüfen Sie, ob die App im Vollbildmodus bleibt.
API-Level 24 bis 30
Wenn Ihre App auf die API-Levels 24 bis 30 ausgerichtet ist und die Unterstützung für den Mehrfenstermodus nicht deaktiviert, prüfen Sie das folgende Verhalten sowohl im Splitscreen- als auch im Desktop-Fenstermodus:
Starte die App im Vollbildmodus und wechsle dann in den Multi-Window-Modus, indem du lange auf die Schaltfläche Letzte drückst. Prüfen Sie, ob die App richtig gewechselt wird.
Starten Sie die App direkt im Mehrfenstermodus und prüfen Sie, ob sie ordnungsgemäß gestartet wird. Sie können eine App im Mehrfenstermodus starten, indem Sie die Schaltfläche Letzte Apps drücken, dann die Titelleiste der App lange gedrückt halten und sie in einen der hervorgehobenen Bereiche auf dem Display ziehen.
Sie können die Größe Ihrer App im Splitscreen-Modus ändern, indem Sie den Bildschirmteiler ziehen. Prüfen Sie, ob die Größe der App ohne Absturz geändert wird und ob die erforderlichen UI-Elemente sichtbar sind.
Wenn Sie Mindestabmessungen für Ihre App angegeben haben, versuchen Sie, die Größe der App so zu ändern, dass die Fenstergröße kleiner als diese Abmessungen ist. Prüfen Sie, ob die App nicht kleiner als die angegebenen Mindestabmessungen skaliert werden kann.
Prüfen Sie bei allen Tests, ob die Leistung Ihrer App akzeptabel ist. Prüfen Sie beispielsweise, ob die Aktualisierung der Benutzeroberfläche nach dem Ändern der Größe der App zu lange dauert.
API‑Level 31 oder höher
Wenn Ihre App auf API‑Level 31 oder höher ausgerichtet ist und die Mindestbreite und ‑höhe der Hauptaktivität kleiner oder gleich den jeweiligen Abmessungen des verfügbaren Displaybereichs sind, prüfen Sie alle Verhaltensweisen, die für API‑Level 24 bis 30 aufgeführt sind.
Checkliste für Tests
So können Sie die Leistung Ihrer App im Mehrfenstermodus überprüfen: Sie sollten diese Vorgänge sowohl im Splitscreen- als auch im Desktop-Fenstermodus ausprobieren, sofern nicht anders angegeben.
Mehrfenstermodus starten und beenden
Wechseln Sie von Ihrer App zu einer anderen App und prüfen Sie, ob sich die App richtig verhält, wenn sie sichtbar, aber nicht aktiv ist. Wenn Ihre App beispielsweise Videos abspielt, prüfen Sie, ob die Wiedergabe fortgesetzt wird, während der Nutzer mit einer anderen App interagiert.
Verschieben Sie im Splitscreen-Modus den Bildschirmteiler, um die App zu vergrößern und zu verkleinern. Probieren Sie diese Vorgänge sowohl nebeneinander als auch übereinander aus. Prüfen Sie, ob die App abstürzt, ob die wichtigsten Funktionen sichtbar sind und ob das Ändern der Größe nicht zu lange dauert.
Mehrere Größenanpassungen in schneller Folge durchführen Prüfen Sie, ob Ihre App abstürzt oder Speicherlecks aufweist. Der Memory Profiler von Android Studio liefert Informationen zur Arbeitsspeichernutzung Ihrer App (siehe Arbeitsspeichernutzung Ihrer App mit dem Memory Profiler untersuchen).
Verwenden Sie Ihre App in verschiedenen Fensterkonfigurationen und prüfen Sie, ob sie sich richtig verhält. Prüfen Sie, ob der Text lesbar ist und die UI-Elemente nicht zu klein sind, um mit ihnen zu interagieren.
Unterstützung für Mehrfenstermodus deaktiviert
Wenn Sie auf den API-Ebenen 24 bis 30 den Mehrfenstermodus deaktiviert haben, indem Sie android:resizeableActivity="false"
festgelegt haben, sollten Sie Ihre App auf einem Gerät mit Android 7.0 bis 11 starten und versuchen, sie in den Modus für geteilten Bildschirm und in den Desktop-Fenstermodus zu versetzen. Prüfen Sie, ob die App im Vollbildmodus bleibt.
Zusätzliche Ressourcen
Weitere Informationen zur Unterstützung von mehreren Fenstern in Android finden Sie hier:
- Android-Beispiel MultiWindowPlayground