Wielokrotne wznowienie

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.
  • 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 10 CameraManager#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.