Mehrere Wiederholungen

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ösen CameraAccessException
    • resizeableActivity=false ist keine Garantie für exklusive Kamerafunktionen da andere Apps, die die Kamera verwenden, auf anderen Displays geöffnet werden können.
  • 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ügt CameraManager#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.