Na Androidzie 9 (i starszych wersjach) aplikacje były zmieniane w stan PAUSED
, gdy:
- Nowa, półprzezroczysta aktywność została uruchomiona u góry aplikacji, gdy aplikacja była nadal widoczna (oraz dlatego też nie powstrzymało się).
- Aktywność przestała być ukierunkowana, ale była niezasłonięta i użytkownik mógł wchodzić z nią w interakcję. Dla: Na przykład w trybie wielu okien można wyświetlać i otrzymywać dotykowe wprowadzanie danych dotyczących różnych aktywności jednocześnie.
Sytuacje te różnią się czasem, przez jaki aplikacja musi wstrzymać ją, ale nie może tego i można je rozpoznać na poziomie aplikacji.
W Androidzie 10 wszystkie działania, których zaznaczenie można zaznaczyć obszar w widocznych stosach,
stan RESUMED
. Zwiększa to zgodność z
Tryb wielu okien i tryb MD dla aplikacji, które używają
onPause()
zamiast onStop()
, aby zatrzymać odświeżanie UI i interakcję
z użytkownikiem. Oznacza to, że:
- Obie czynności na podzielonym ekranie zostały wznowione.
- Wszystkie aktywności widoczne u góry w trybie swobodnego wyświetlania okien zostały wznowione.
- Czynności na wielu ekranach można wznowić jednocześnie.
Rysunek 1. Wielokrotne wznawianie na urządzeniu składanym
Rysunek 2. Wielokrotne wznawianie w trybie pulpitu
Aktywności mogą znajdować się w stanie PAUSED
, na których nie można się skupić lub są
częściowo ukryte, np.:
- Na zminimalizowanym podzielonym ekranie (z programem uruchamiającym na boku) główna aktywność nie jest wznawiana, ponieważ nie można zaznaczyć.
- W trybie obraz w obrazie aktywność nie jest wznawiana, ponieważ nie można go zaznaczyć.
- Gdy działania są objęte innymi przezroczystymi działaniami w tej samej grupie.
Ta metoda wskazuje aplikacjom, że aktywność może otrzymywać dane wejściowe z
użytkownika tylko w stanie RESUMED
. Przed Androidem 10
działania mogą również otrzymywać dane wejściowe w stanie PAUSED
(na przykład spróbuj dotknąć
na podzielonym ekranie i jednocześnie na urządzeniu z Androidem 9.
Aby zachować sygnał wznowienia z poprzednich wersji Androida (oraz aby określać, kiedy aplikacje powinny mieć dostęp do wersji na wyłączność ), Android 10 zawiera nowe wywołanie zwrotne:
Activity#onTopResumedActivityChanged(boolean onTop)
Po wywołaniu to wywołanie zwrotne jest wywoływane między Activity#onResume()
i Activity#onPause()
. To wywołanie zwrotne jest opcjonalne i można je pominąć.
aby stan aktywności został zmieniony z RESUMED
na PAUSED
a jednocześnie nie jesteśmy w stanie zająć się najwyższymi w systemie. na przykład w trybie wielu okien.
To wywołanie zwrotne jest opcjonalne, więc nie jest częścią Activity
Cykl życia i należy go używać rzadko.
Poprzednia górna wznowiona aktywność odbiera i kończy wykonanie
onTopResumedActivity(false)
przed następną najczęściej wznawianą aktywnością
otrzymuje onTopResumedActivity(true)
, chyba że poprzednia aktywność
obsługa wywołania metody trwa zbyt długo i przekracza limit 500 ms.
Zgodność
Aby zachować zgodność przy wdrażaniu wielokrotnego wznawiania, weź pod uwagę te kwestie i rozwiązania.
Wiele wznowionych działań w jednym procesie aplikacji
- Issue (Problem). W Androidzie 9 i starszych wersjach systemu wznowione jednorazowo. Każde przejście między działaniami obejmuje wstrzymywanie przed wznowieniem kolejnej. Niektóre aplikacje i platformy (takie jak Flutter lub LocalActivityManager Androida) wykorzystują to i zapisują stan wznowienia aktywność w pojedynczych tonach.
- Rozwiązanie. W Androidzie 9 i starszych wersjach, jeśli 2 działania są wykonywane w ramach tego samego procesu wznawiane, system wznawia tylko aktywność znajdującą się wyżej w porządku warstwowym. Aplikacje kierowane na Androida 10 mogą obsługiwać wiele aktywności i jej wznowienie.
Jednoczesny dostęp do kamery
- Problemy. Te problemy występują również w Androidzie 9
obniżysz się. Na przykład po wznowieniu działania w trybie pełnoekranowym i wznowieniu działania kamery mogą zostać
wstrzymaną aktywność u góry ekranu w trybie obrazu w obrazie, ale zwiększaj jej ekspozycję
szersze zastosowanie trybów wielu okien i wielu wyświetlaczy.
- Ze względu na zmiany w stanie
RESUME
aplikacje mogą być został odłączony od kamery, nawet jeśli został wznowiony. Aby rozwiązać ten problem, musi obsługiwać kamerę bez awarii. Po rozłączeniu aplikacje otrzymują rozłączone wywołanie zwrotne i wszystkie wywołania interfejsu API zaczynają wysyłaćCameraAccessException
resizeableActivity=false
nie gwarantuje, że będziesz mieć wyjątkowy aparat ponieważ aplikacje korzystające z aparatu można otwierać na innych ekranach.
- Ze względu na zmiany w stanie
- Rozwiązania. Deweloperzy powinni dodać logikę, która określa, kiedy aplikacja
jest odłączony od kamery. Jeśli aplikacja zostanie odłączona od kamery,
powinien obserwować wywołania zwrotne dostępności kamery, aby spróbować ponownie nawiązać połączenie i kontynuować
korzystanie z aparatu. Oprócz istniejących
CameraManager#AvailabilityCallback#onCameraAvailable()
oddzwonienie, Dodano Androida 10CameraManager#AvailabilityCallback#onCameraAccessPrioritiesChanged()
, Zakrywa etui, gdy ostrość (i priorytet aparatu) przełącza się wznowionych działań. Deweloperzy aplikacji powinni używać obu tych wywołań zwrotnych, aby określić, kiedy jest dobry moment na dostęp do aparatu.
Wielokrotne wznowienie
W Androidzie 10 stan cyklu życia aktywności jest określany na podstawie widoczności
Na osi Z. Aby zapewnić właściwy stan po zaktualizowaniu widoczności na
i ocenić odpowiedni stan cyklu życia, wywołując metodę
Metoda ActivityRecord#makeActiveIfNeeded()
z różnych
lokalizacji. Na Androidzie 10 wartość „aktywny” oznacza RESUMED
lub
PAUSED
i działa tylko w tych 2 przypadkach.
W Androidzie 10 wznowienie aktywności jest śledzone oddzielnie w każdym stosie
a nie w jednym miejscu w systemie. Dzieje się tak, ponieważ kilka z nich
przejścia między aktywnościami mogą być wykonywane jednocześnie w trybie wielu okien. Dla:
Więcej informacji: ActivityStack#mInResumeTopActivity
.
Wywołanie zwrotne aktywności najwyżej wznowionej
Po działaniach, które mogą spowodować zmianę największej aktywności (np. aktywność)
uruchomienie, wznowienie lub zmianę kolejności nakładania elementów),
Metoda ActivityStackSupervisor#updateTopResumedActivityIfNeeded()
jest wywoływana. Ten
sprawdza, czy najwyżej wznowiona aktywność uległa zmianie i przeprowadza aktualizację, jeśli
niezbędną. Jeśli poprzednia aktywność najwyżej wznawiana nie spowodowała przywrócenia tej aktywności
do niego wysyłany jest komunikat o utracie stanu w górę i w dół,
zaplanowane po stronie serwera
(ActivityStackSupervisor#scheduleTopResumedStateLossTimeout()
).
Raport o stanie najwyższego wznowienia jest wysyłany do następnego działania, które następuje po poprzednim
nastąpiło zwolnienie stanu lub przekroczenie limitu czasu (patrz przypadki użycia:
ActivityStackSupervisor#scheduleTopResumedActivityStateIfNeeded()
Dodano nowy element transakcji TopResumedActivityChangeItem
raportów o najważniejszych wznowionych zmianach stanu
i wykorzystuje
architektura ActivityLifecycler
z Androida 9.
Stan Górny wznowiony jest przechowywany po stronie klienta, a przy każdym wywołaniu
aktywność przechodzi na RESUMED
lub PAUSED
, a także
sprawdza, czy wywołanie zwrotne onTopResumedActivityChanged()
powinno być
. Umożliwia to pewne odłączenie w komunikacji stanów cyklu życia
między serwerem a klientem.