Unter Android 9 (und niedriger) wurden Apps in den folgenden Fällen in den Status PAUSED
gesetzt:
- Eine neue, durchscheinende Aktivität wurde über der App gestartet, während die App noch sichtbar war (und daher nicht aufgehalten wurde).
- Die Aktivität hat den Fokus verloren, war aber nicht verdeckt und der Nutzer konnte mit ihr interagieren. Für Im Mehrfenstermodus können beispielsweise eine Reihe von Aktivitäten sichtbar sein und durch Berührung eingegeben werden. gleichzeitig.
Das Pausieren einer App ist unterschiedlich. auf App-Ebene unterscheiden.
In Android 10 befinden sich alle hochfokussierbaren Aktivitäten in sichtbaren Stacks
RESUMED
. Dies verbessert die Kompatibilität mit
den Mehrfenstermodus und den MD-Modus für Apps, die
onPause()
statt onStop()
, um die Aktualisierung der Benutzeroberfläche und die Interaktion zu beenden
mit den Nutzenden. Das bedeutet:
- Beide Aktivitäten im Splitscreen werden fortgesetzt.
- Alle am besten sichtbaren Aktivitäten im Windowing-Modus im freien Format werden fortgesetzt.
- Aktivitäten auf mehreren Bildschirmen können gleichzeitig fortgesetzt werden.
Abbildung 1: Multi-Resume auf einem faltbaren Gerät
Abbildung 2: Mehrere Fortsetzung im Desktopmodus
Aktivitäten können sich im Status PAUSED
befinden, wenn sie nicht fokussiert werden können oder
Teilweise verdeckt, z. B.:
- Bei einem minimierten geteilten Bildschirm mit einem Launcher auf der Seite wird die Top-Aktivität nicht fortgesetzt, nicht fokussierbar.
- Im Bild-im-Bild-Modus wird die Aktivität nicht fortgesetzt, weil sie nicht fokussierbar ist.
- Wenn Aktivitäten von anderen transparenten Aktivitäten im selben Stapel abgedeckt werden.
So weisen Sie Apps darauf hin, dass eine Aktivität Eingaben von einem
Nutzer mit dem Status RESUMED
. Vor Android 10
Aktivitäten können auch Eingaben im Status PAUSED
erhalten. Versuchen Sie beispielsweise,
auf einem Gerät mit Android 9 beide Aktivitäten gleichzeitig im Splitscreen-Modus anzeigen.
Um das Signal resumed aus früheren Android-Releases beizubehalten um zu kommunizieren, wann Apps Zugang zu exklusivem Zugriff oder Singleton erhalten sollen Ressourcen) enthält Android 10 einen neuen Callback:
Activity#onTopResumedActivityChanged(boolean onTop)
Wenn dieser Callback aufgerufen wird, wird er zwischen Activity#onResume()
und Activity#onPause()
. Dieser Callback ist optional und kann übersprungen werden.
damit eine Aktivität von einem RESUMED
- in einen PAUSED
-Status wechseln kann.
ohne die oberste Position im System zu werden. Zum Beispiel im Mehrfenstermodus.
Da dieser Callback optional ist, ist er nicht Teil der Activity
Lebenszyklus und sollte nur selten verwendet werden.
Die vorherige am häufigsten fortgesetzte Aktivität empfängt und beendet die Ausführung von
onTopResumedActivity(false)
vor der nächsten am häufigsten fortgesetzten Aktivität
erhält onTopResumedActivity(true)
, es sei denn, die vorherige Aktivität
zu viel Zeit für die Verarbeitung des Methodenaufrufs benötigt und das Zeitlimit von 500 ms erreicht.
Kompatibilität
Beachten Sie zur Aufrechterhaltung der Kompatibilität bei der Implementierung von mehreren Lebensläufen Folgendes: Lösungen zu finden.
Mehrere wiederaufgenommene Aktivitäten in einem App-Prozess
- Problem. Unter Android 9 und niedriger ist nur eine Aktivität im System wieder aufgenommen werden. Bei allen Übergängen zwischen Aktivitäten wird ein Aktivität beginnen, bevor Sie mit der nächsten fortfahren. Einige Apps und Frameworks (z. B. Flutter oder „LocalActivityManager“ von Android verwenden, und speichern Sie den Status Aktivität in Singleton-Einheiten.
- Lösung. In Android 9 und niedriger, wenn zwei Aktivitäten aus demselben Prozess fortgesetzt werden, nimmt das System nur die Aktivität wieder auf, die in Z-Reihenfolge höher ist. Apps, die auf Android 10 ausgerichtet sind, unterstützen mehrere Aktivitäten wieder aufgenommen werden.
Gleichzeitiger Kamerazugriff
- Probleme: Diese Probleme treten auch bei Android 9 und
darunter. Beispielsweise kann bei einer Vollbildaktivität und einer fortgesetzten Aktivität der Kamerafokus auf einen
ist die Aktivität im Bild-im-Bild-Modus oben pausiert,
breitere Nutzung des Mehrfenster- und Mehrfenstermodus.
- Aufgrund von Änderungen am Status „
RESUME
“ können Apps die nicht mit der Kamera verbunden ist, auch wenn sie fortgesetzt wird. Um dieses Problem zu beheben, muss die Verbindung der Kamera ohne Absturz bewältigen. Wenn Apps nicht verbunden sind, erhalten sie ein und alle API-Aufrufe lösenCameraAccessException
resizeableActivity=false
ist keine Garantie für exklusive Kamerafunktionen da andere Apps, die die Kamera verwenden, auf anderen Displays geöffnet werden können.
- Aufgrund von Änderungen am Status „
- Lösungen. Entwickler sollten eine Logik für den Fall angeben,
nicht mit der Kamera verbunden ist. Wenn eine App von der Kamera getrennt ist,
sollte die Callbacks zur Verfügbarkeit der Kamera beobachten, um die Verbindung wiederherzustellen und fortzufahren
Kameranutzung. Zusätzlich zu den bestehenden
CameraManager#AvailabilityCallback#onCameraAvailable()
-Rückruf, Android 10 hinzugefügtCameraManager#AvailabilityCallback#onCameraAccessPrioritiesChanged()
, der den Fall abdeckt, wenn der Fokus (und die Kamerapriorität) zwischen mehreren Aktivitäten wieder aufgenommen werden. App-Entwickler sollten beide Callbacks verwenden, um finden Sie eine geeignete Zeit, um Zugriff auf die Kamera zu erhalten.
Multi-Lebenslauf
In Android 10 wird der Status des Aktivitätslebenszyklus durch Sichtbarkeit und
Z-Reihenfolge. Um sicherzustellen, dass der korrekte Status nach der Aktualisierung einer
und ermitteln Sie, welcher Lebenszyklusstatus anwendbar ist. Rufen Sie den
ActivityRecord#makeActiveIfNeeded()
-Methode von einer anderen
Standorte. In Android 10 bedeutet „Aktiv“ entweder RESUMED
oder
PAUSED
und funktioniert nur in diesen beiden Fällen.
In Android 10 wird das Fortsetzen einer Aktivität in jedem Stapel separat verfolgt
statt an einem
einzigen Ort im System. Das liegt daran, dass mehrere
Aktivitätsübergänge können im Mehrfenstermodus gleichzeitig ausgeführt werden. Für
Weitere Informationen finden Sie unter ActivityStack#mInResumeTopActivity
.
Callback für die am häufigsten fortgesetzte Aktivität
Nach Aktionen, die zu einer Änderung der häufigsten Aktivität führen können, z. B. Aktivitäten
Start, Fortsetzen oder Änderung der Z-Reihenfolge),
ActivityStackSupervisor#updateTopResumedActivityIfNeeded()
wird aufgerufen. Dieses
prüft, ob sich die oberste fortgesetzte Aktivität geändert hat, und führt die Aktualisierung durch, wenn
erforderlich. Wenn die vorherige am stärksten fortgesetzte Aktivität nicht die am häufigsten fortgesetzte Aktivität freigegeben hat
wird eine Nachricht mit dem Status „Top-Resumed-State-Loss“ gesendet und das Zeitlimit wird
serverseitig geplant
(ActivityStackSupervisor#scheduleTopResumedStateLossTimeout()
)
Ein Bericht über den Top-Fortsetzungsstatus wird an die nächste Aktivität nach der vorherigen
einer den Status freigegeben hat oder wenn eine Zeitüberschreitung eintrat (siehe Verwendungen von:
ActivityStackSupervisor#scheduleTopResumedActivityStateIfNeeded()
Ein neues TopResumedActivityChangeItem
-Transaktionselement wurde hinzugefügt
um die wichtigsten fortwährenden Statusänderungen an Kunden zu melden
ActivityLifecycler
-Architektur von Android 9.
Der Top-Fortsetzungszustand wird clientseitig
gespeichert und jedes Mal, wenn der
wird die Aktivität auf RESUMED
oder PAUSED
umgestellt,
Prüft, ob der onTopResumedActivityChanged()
-Callback
aufgerufen wird. Dies ermöglicht eine bestimmte Entkopplung bei der Kommunikation von Lebenszyklusstatus
und den Top-Fortsetzungszustand zwischen Server- und Clientseite.