Lista zadań i stos wsteczny

Zadanie to zbiór działań, z którymi użytkownicy wchodzą w interakcje, gdy zrobić coś w aplikacji. Działania te są ułożone w stosie nazywany back stack (stos cofnięty) w kolejności otwarcia poszczególnych aktywności.

Na przykład aplikacja do poczty e-mail może mieć jedną aktywność, aby wyświetlić listę nowych wiadomości. Gdy użytkownik wybierze wiadomość, otworzy się nowa aktywność, aby wyświetlić tę wiadomość. Ta nowa aktywność została dodana na tylny stos. Później, gdy użytkownik kliknie lub kliknie Wstecz, nastąpi ta nowa aktywność. dobiega końca i zostaje wypuszczony ze stosu.

Cykl życia zadania i jego stosu tylnego

Ekran główny urządzenia to punkt początkowy większości zadań. Gdy użytkownik dotknie ekranu ikonę aplikacji lub skrótu w Menu z aplikacjami lub na ekranie głównym, to zadanie jest wyświetlane na pierwszym planie. Jeśli w przypadku aplikacji nie ma zadania, zostało utworzone nowe zadanie, a główne aktywność w przypadku otwierania tej aplikacji jako aktywność pierwiastka w stosie.

Gdy bieżąca aktywność rozpocznie inne, nowe działanie zostanie przeniesione na górę i ustawia ostrość. Poprzednia aktywność pozostaje w stosie, ale jest zatrzymano. Po zatrzymaniu działania system zachowuje bieżący stan za pomocą prostego interfejsu online. Gdy użytkownik wykona działanie cofnięcia, bieżąca aktywność zostanie które wyskoczyły z góry stosu i zostały zniszczone. poprzednia aktywność zostanie wznowiona, a jej interfejs użytkownika zostanie przywrócony.

Aktywności w stosy nigdy nie są porządkowane, są tylko wypychane na stos i wyskakiwane z niego w miarę, jak są uruchomione przez bieżącą aktywność i odrzucone przez użytkownika za pomocą przycisku lub gestu Wstecz. Tylny stos działa więc jako struktury obiektów typu ostatni w, pierwszy w dół. Rysunek 1 przedstawia oś czasu z czynności wypychanych na bok i wyskakujących z backendu.

Rysunek 1. Reprezentacja tego, jak każda nowa aktywność w dodaje element do stosu z tyłu. Gdy użytkownik klika lub wykonuje gesty Powrót — bieżąca aktywność zostanie zniszczona, a poprzednia CV.

Każda czynność w stosie, gdy użytkownik będzie nadal naciskać Wstecz lub cofać się jest wyświetlana, aby pokazać poprzednią wersję, dopóki użytkownik nie wróci na stronę główną ekranu lub innego działania, które było uruchomione w momencie rozpoczęcia zadania. Gdy wszyscy działania zostały usunięte ze stosu, zadanie już nie istnieje.

Działanie po dotknięciu tyłu w przypadku działań uruchamiających na urządzeniu głównym

Działania uruchamiające główny element to działania deklarujące intencję filtr, używając obu ACTION_MAIN i CATEGORY_LAUNCHER Są one wyjątkowe, ponieważ stanowią punkt wejścia do aplikacji Menu z aplikacjami i służy do uruchamiania zadań.

Gdy użytkownik klika lub wykonuje gest Wstecz z poziomu głównego programu uruchamiającego, obsługuje zdarzenia w różny sposób, w zależności od wersji Androida, jest uruchomione urządzenie.

Zachowanie systemu na Androidzie 11 i starszych
System kończy aktywność.
Zachowanie systemu na Androidzie 12 i nowszych

System przenosi aktywność i zadanie w tle, zamiast na koniec ćwiczenia. To zachowanie jest zgodne z domyślnym zachowaniem systemu, gdy: wychodzenia z aplikacji za pomocą przycisku lub gestu ekranu głównego.

W większości przypadków oznacza to, że użytkownicy mogą szybciej wznowić aplikację. z stanu „ciepły”, a nie Konieczność całkowitego ponownego uruchomienia aplikacji na zimno stanu.

Jeśli chcesz udostępnić niestandardową nawigację wstecz, zalecamy używanie interfejsów AndroidX Activity API zamiast zastępowania onBackPressed() Interfejsy API związane z aktywnością na AndroidzieX automatycznie przekazują do odpowiednie działanie systemu, jeśli żadne komponenty nie przechwytują systemu Kliknij wstecz.

Jeśli jednak Twoja aplikacja onBackPressed() do obsługi Wróć do nawigacji i dokończ aktywność, zaktualizuj implementację, by wywołać do super.onBackPressed(), zamiast zakończyć. Łączę Aplikacja super.onBackPressed() przenosi aktywność i powiązane z nią zadanie w tle, gdy odpowiednie i pozwala użytkownikom na bardziej spójną nawigację w różnych aplikacjach.

Zadania w tle i na pierwszym planie

Rysunek 2. 2 zadania: zadanie B wymaga interakcji użytkownika na pierwszym planie, podczas gdy zadanie A jest w tle i czeka na CV.

Zadanie to spójna jednostka, która może przejść do trybu w tle, gdy użytkownik rozpocznie nowe zadanie lub powoduje przejście do ekranu głównego. W tle wszystkie działania zadania zostaną zatrzymane, ale stos wsteczny zadania pozostanie niezmieniony, traci koncentrację podczas wykonywania innego zadania, co pokazuje rysunek 2. O zadanie może następnie wrócić na pierwszy plan, aby użytkownicy mogli kontynuować pracę od miejsca, w którym ją opuścili. wyłączone.

Rozważ ten przepływ zadań w przypadku bieżącego zadania A, ma w stosie trzy działania, w tym dwa w ramach bieżącej:

  1. Użytkownik używa przycisku lub gestu ekranu głównego, a następnie uruchamia nową aplikację na Menu z aplikacjami.

    Gdy pojawi się ekran główny, zadanie A będzie w tle. Gdy nowa wersja uruchamia się aplikacja, system rozpoczyna zadanie dla tej aplikacji (zadanie B) z własnym stosem; aktywności.

  2. Po interakcji z aplikacją użytkownik wraca ponownie na ekran główny i wybiera przycisk aplikację, która rozpoczęła zadanie A.

    Teraz na pierwszym planie pojawia się zadanie A – wszystkie 3 działania w stosie są a działalność u góry stosu zostanie wznowiona. W tym momencie Użytkownik może też wrócić do zadania B, wchodząc na ekran główny i wybierając ikonę aplikacji która rozpoczęła to zadanie, lub wybierając zadanie aplikacji z listy Ostatnie ekranu.

.

Wiele instancji aktywności

Rysunek 3. Pojedyncza aktywność może zostać utworzona z wielu instancji razy.

Kolejność aktywności na plecach stosów nie jest zawsze zmieniana, pozwala użytkownikom rozpocząć określoną czynność na podstawie kilku działań, takiej aktywności jest tworzone i przekazywane na stos zamiast wszystkie wcześniejsze wystąpienia aktywności na górze. W związku z tym jeden aktywność w aplikacji może być inicjowana wiele razy, nawet z różnych jak widać na rysunku 3.

Jeśli użytkownik przejdzie wstecz, używając przycisku Wstecz przycisk lub gest, wystąpienia aktywności są ujawniane w kolejności, w jakiej otwartego, z własnym stanem interfejsu użytkownika. Możesz jednak zmienić to ustawienie działania, jeśli nie chcesz, aby dana aktywność występowała więcej niż raz. Ucz się Więcej informacji na ten temat znajdziesz w sekcji Zarządzanie zadania.

Środowiska z wieloma oknami

Gdy aplikacje działają jednocześnie w widoku wielu okien środowiska, obsługiwane w Androidzie 7.0 (interfejs API na poziomie 24) lub wyższym, system zarządza zadaniami oddzielnie dla każdego okna. Każdy może zawierać wiele zadań. To samo dotyczy aplikacji na Androida działających na Chromebooki: system umożliwia zarządzanie zadaniami, czyli grupami zadań w zależności od terminu.

Podsumowanie cyklu życia

Podsumujmy domyślne zachowanie aktywności i zadań:

  • Gdy aktywność A rozpoczyna aktywność B, aktywność A zostaje zatrzymana, ale system zachowuje swój stan, np. pozycję przewijania i wszelki tekst wpisany w formularzach. Jeśli użytkownik klika lub używa gestu Wstecz w aktywności B, aktywność A. zostanie wznowiony z przywróconym stanem.

  • Gdy użytkownik opuści zadanie, naciskając przycisk lub gest na ekranie głównym, aktywność zostanie zatrzymana, a jego zadanie będzie w tle. System zachowuje stan każdej aktywności w zadaniu. Jeśli użytkownik później wznowi to zadanie przez po kliknięciu ikony programu uruchamiającego, która rozpoczęła zadanie, zadanie pojawi się i wznawia działanie u góry stosu.

  • Jeśli użytkownik kliknie lub cofnie przycisk Wstecz, zostanie pobrana bieżąca aktywność a następnie zniszczyć. Poprzednia aktywność w grupie zostanie wznowiona. Kiedy aktywność zostanie zniszczona, system nie zachowa jej stanu.

    To działanie różni się w przypadku czynności uruchamiających na urządzeniu głównym gdy aplikacja działa na urządzeniu z Androidem 12 lub nowszym.

  • Wystąpienia działań można tworzyć wiele razy, nawet z innych zadań.

.

Zarządzanie zadaniami

Android zarządza zadaniami i stosem tylnym, rozmieszczając je wszystkie działania rozpoczęte po sobie w tym samym zadaniu, w ciągu ostatniego na zewnątrz. Sprawdza się to w przypadku większości aplikacji i nie musisz się martwić powiązania aktywności z zadaniami lub ich istnienia w plecach. stosów.

Możesz jednak chcieć zakłócić ich normalne działanie. Może na przykład być związana z rozpoczęciem nowego zadania przez aktywność w aplikacji, gdy rozpoczęto, zamiast umieszczać w bieżącym zadaniu. Lub, gdy uruchomisz działania, możesz przenieść jego istniejące wystąpienie zamiast podczas tworzenia nowej instancji na górze stosu wstecznego. Możesz też chcesz usunąć ze wszystkich aktywności z wyjątkiem aktywności na poziomie głównym gdy użytkownik opuści zadanie.

Za pomocą atrybutów w Element manifestu <activity> i flagi w intencji, którą przekazujesz startActivity()

Oto atrybuty podmiotu zabezpieczeń <activity>, których możesz używać do zarządzania zadaniami:

Możesz użyć tych flag intencji podmiotu zabezpieczeń:

W poniższych sekcjach opisano, jak używać tych atrybutów pliku manifestu. i flagi intencji, aby zdefiniować, jak działania są powiązane z zadaniami i w jaki sposób zachowanie w stosunku do tyłu.

Omówiliśmy też kwestie związane z tym, jak zadania i aktywności są widoczne i zarządzane na ekranie Ostatnie. Normalnie definiują sposób przedstawiania zadań i działań w Ostatnie. Nie musisz zmieniać tego działania. Więcej Więcej informacji znajdziesz w sekcji Ekran Ostatnie.

Zdefiniuj tryby uruchamiania

Tryby uruchamiania pozwalają określić sposób powiązania nowego wystąpienia aktywności z bieżącym zadaniem. Tryby uruchamiania można definiować na 2 sposoby: w następujących sekcjach:

Jeśli więc aktywność A rozpoczyna działanie B, działanie B może zdefiniować w swoim manifeście jak jest powiązane z bieżącym zadaniem, a aktywność A może korzystać z flagi intencji aby dowiedzieć się, jak aktywność B może być powiązana z bieżącym zadaniem.

Jeśli oba działania B określają, jak aktywność B powiąże się z zadaniem, zgodnie z definicją w intencji, jest ono brane pod uwagę w odniesieniu do żądania Aktywności B jako zdefiniowane w pliku manifestu.

Zdefiniuj tryby uruchamiania za pomocą pliku manifestu

Przy deklarowaniu aktywności w pliku manifestu możesz określić, w jaki sposób jest powiązane z zadaniem przy użyciu Element <activity> launchMode.

Do atrybutu launchMode możesz przypisać 5 trybów uruchamiania:

  1. "standard"
    Tryb domyślny. System tworzy nową instancję aktywności w zadaniu został uruchomiony i kieruje do niego intencję. Działaniem może być wiele instancji, każda może należeć do innego zadania; jedno zadanie może mieć wiele instancji.
    .
  2. "singleTop"
    Jeśli wystąpienie aktywności już istnieje u góry bieżącego zadania, system kieruje intencję do tej instancji przez wywołanie jej onNewIntent(). zamiast tworzenia nowego wystąpienia aktywności. Działanie jest wiele instancji, każda może należeć do innego zadania, i jedno zadanie może mieć wiele wystąpień (ale tylko wtedy, gdy działanie na samej górze stosu wstecznego nie jest istniejącym wystąpieniem aktywności).

    Na przykład załóżmy, że tylny stos zadania składa się z działania głównego A o nazwie aktywności B, C i D (np. stos będzie A-B-C-D, a D będzie na górze). Zamiar przychodzi do działania typu D. Jeśli D ma domyślne uruchomienie "standard" w trybie A-B-C-D-D powstaje nowa instancja klasy, a stos zmienia się w A-B-C-D-D. Jeśli jednak tryb uruchamiania D to "singleTop", istniejąca instancja D otrzymuje intencję przez: onNewIntent(), ponieważ jest on na górze stosu, który pozostaje A–B-C-D. Jeśli: z drugiej strony, dla działania typu B dla działania typu B zostaje dodane nowe wystąpienie B stosu, nawet jeśli jego tryb uruchamiania to "singleTop".

  3. "singleTask"
    System tworzy aktywność u głównego zadania lub znajduje w ramach istniejącego zadania o tej samej koligacji. Jeśli w jego przypadku aktywność już istnieje, system kieruje do istniejącej instancji za pomocą wywołania jej onNewIntent() zamiast tworzenia nowej instancji. W międzyczasie wszystkie pozostałe jest niszczona.
    .
    .
  4. "singleInstance".
    Działanie jest takie samo jak w przypadku aplikacji "singleTask" z wyjątkiem tego, że system nie uruchamia żadnych innych funkcji wykonywać działania w ramach zadania zawierającego instancję. Aktywność jest zawsze jako jedynego członka grupy. Wszystkie aktywności rozpoczęte przez to wydarzenie są otwierane w osobne zadanie.
    .
  5. "singleInstancePerTask".
    Działanie może być wykonywane tylko jako główne działanie w ramach zadania działanie, które spowodowało utworzenie zadania, więc może występować tylko jedna instancja podczas wykonywania zadania. W przeciwieństwie do trybu uruchamiania singleTask funkcja ta aktywność może być uruchomiona w wielu instancjach w różnych zadaniach, jeśli FLAG_ACTIVITY_MULTIPLE_TASK. lub FLAG_ACTIVITY_NEW_DOCUMENT flaga jest ustawiona.
    .
.

Kolejny przykład: aplikacja przeglądarki na Androida deklaruje, że przeglądarka aktywność jest zawsze otwierana w osobnym zadaniu przez określenie singleTask tryb uruchamiania w <activity> . Oznacza to, że jeśli aplikacja wysyła intencję otwarcia Androida przeglądarki, jej aktywność nie jest umieszczona w tym samym zadaniu co Twoja aplikacja. Zamiast tego: zostanie uruchomione nowe zadanie dla przeglądarki, albo jeśli przeglądarka ma już zadanie, które działa w tle, to zadanie jest przekazywane w celu obsługi nowych intencji.

Niezależnie od tego, czy aktywność rozpoczyna się w nowym zadaniu, czy w tym samym zadaniu aktywność, która ją rozpoczęła, przycisk Wstecz i gest zawsze przyjmują do poprzedniej aktywności. Jeśli jednak rozpoczniesz aktywność, która określa tryb uruchamiania singleTask. Jej wystąpienie znajduje się w zadanie w tle, całe zadanie pojawi się na pierwszym planie. W tym momencie obejmuje wszystkie działania z zadania w górnej części stosu. Rysunek 4 pokazuje taki scenariusz.

Rysunek 4. Reprezentacja działania z wprowadzeniem na rynek tryb "singleTask" jest dodany do stosu tylnego. Jeśli aktywność jest już częścią zadania w tle z własnym stosem wstecznym, cały tylny stos również wychodzi do przodu, nad obecnym

Więcej informacji o używaniu trybów uruchamiania w pliku manifestu znajdziesz w dokumentacji Dokumentacja elementu <activity>.

Zdefiniuj tryby uruchamiania za pomocą flag intencji

Gdy rozpoczynasz aktywność, możesz zmienić jej domyślne powiązanie przez uwzględnienie flag w intencji, którą dostarczasz startActivity() Flagi, których możesz użyć do zmiany domyślnego działania, są następujące:

FLAG_ACTIVITY_NEW_TASK

System rozpocznie aktywność w nowym zadaniu. Jeśli zadanie jest już uruchomione dla uruchamia się, zadanie jest wyświetlane na pierwszym planie wraz z ostatni stan został przywrócony, a aktywność otrzyma nową intencję w onNewIntent()

Powoduje to takie samo zachowanie jak "singleTask" Omówiona wartość launchMode w poprzedniej sekcji.

FLAG_ACTIVITY_SINGLE_TOP

Jeśli inicjowana aktywność to bieżąca aktywność, w górnej części tyłu stosu, istniejąca instancja otrzymuje wywołanie onNewIntent() zamiast tworzyć nowe wystąpienie aktywności.

Powoduje to takie samo zachowanie jak "singleTop" Wartość launchMode omówiona w poprzedniej sekcji.

FLAG_ACTIVITY_CLEAR_TOP

Jeśli inicjowana aktywność jest już uruchomiona w bieżącym zadaniu, to zamiast uruchamiać nowe wystąpienie tego działania, powoduje zniszczenie wszystkich pozostałych działań, które występują na jego tle. Intencją jest dostarczana do wznowionego wystąpienia aktywności, teraz u góry, przez onNewIntent()

Atrybut launchMode nie ma wartości, która powoduje takie zachowanie.

FLAG_ACTIVITY_CLEAR_TOP jest najczęściej używany w połączeniu z FLAG_ACTIVITY_NEW_TASK Te flagi użyte razem Zlokalizuj istniejącą aktywność w innym zadaniu i umieść ją w odpowiednim miejscu w których może zareagować na intencje.

Podobne zainteresowania

Podobne zainteresowania wskazują, które zadanie preferuje aktywność do których należy. Według domyślnie wszystkie aktywności z tej samej aplikacji są ze sobą powiązane: oni „preferują” i wykonywali te same zadania.

Możesz jednak zmienić domyślną koligację aktywności. Zdefiniowane moduły mogą mieć wspólne zainteresowania, a działania zdefiniowane w tej samej aplikacji mogą być przypisane różne podobne zadania.

Koligację aktywności możesz zmienić za pomocą interfejsu taskAffinity atrybut zbioru danych <activity> .

Atrybut taskAffinity przyjmuje wartość ciągu znaków, która musi być inna niż domyślna nazwa pakietu zadeklarowane w tabeli <manifest> , ponieważ system używa tej nazwy do zidentyfikowania zadania domyślnego. z zainteresowaniami aplikacji.

Przywiązanie wchodzi w grę w dwóch sytuacjach:

  1. Gdy intencja uruchamiająca działanie zawiera tag FLAG_ACTIVITY_NEW_TASK flaga.

    Nowe działanie jest domyślnie uruchamiane w ramach zadania, które o nazwie startActivity() Jest przekazywana na ten sam tylny stos co element wywołujący.

    Jeśli jednak intencja przekazana do startActivity() zawiera tag FLAG_ACTIVITY_NEW_TASK oznacza, że system szuka innego zadania dla nowej aktywności. Często To jest nowe zadanie. Jednak nie musi tak być. Jeśli występuje istniejące zadanie o takim samym podobieństwom do nowego działania, dla tego zadania. W przeciwnym razie rozpocznie się nowe zadanie.

    Jeśli ta flaga powoduje rozpoczęcie nowego zadania, a użytkownik użyje polecenia przycisk ekranu głównego lub gest, który pozwala go opuścić; użytkownik musi być w jakiś sposób wróć do zadania. Niektóre elementy, na przykład menedżer powiadomień, zawsze rozpoczynają działania w zadaniu zewnętrznym, a nie w ramach własnych, więc zawsze umieszczają FLAG_ACTIVITY_NEW_TASK w intencjach, do których są przekazywane startActivity()

    Jeśli podmiot zewnętrzny, który może użyj tej flagi, aby wywołać Twoją aktywność, upewnij się, że użytkownik ma niezależnego sposobu powrotu do uruchomione zadanie, np. z ikoną programu uruchamiającego, gdzie głównym działaniem zadanie ma CATEGORY_LAUNCHER filtr intencji. Więcej informacji znajdziesz w sekcji o rozpoczynaniu zadań.

  2. Gdy aktywność ma allowTaskReparenting ustawiono na "true".

    W takim przypadku aktywność może zostać przeniesiona z zadania, w którym została uruchomiona, do zadania, na którym się znajduje. kiedy to zadanie pojawi się na pierwszym planie.

    Na przykład załóżmy, że aktywność raportuje warunki pogodowe w wybrane miasta są zdefiniowane w aplikacji turystycznej. Podobne zainteresowania jak inne aktywności w tej samej aplikacji, domyślne koligację z aplikacją. zostaną ponownie ustawione jako nadrzędne przy użyciu tego atrybutu.

    Gdy jedna z aktywności rozpocznie się działania reportera pogody, początkowo należy do tego samego zadania działania. Jeśli jednak zadanie aplikacji turystycznej wyświetli się na pierwszym planie, aktywność reportera pogodowego zostanie przypisana do tego zadania i będzie w nim wyświetlana.

.

Wyczyść tylny stos

Jeśli użytkownik opuści zadanie przez dłuższy czas, system anuluje zadanie oprócz aktywności głównej. Gdy użytkownik wróci do zadania, System działa w ten sposób na podstawie założenie, że po dłuższy czas, gdy użytkownicy porzucili to, co działyli; oraz wracają do zadania, aby zacząć coś nowego.

Istnieją atrybuty aktywności, których możesz użyć, aby zmienić to działanie:

alwaysRetainTaskState
Gdy ten atrybut jest ustawiony na "true" w głównej aktywności zadania, Opisane przed chwilą domyślne zachowanie nie występuje. Zadanie zawiera wszystkie nawet po długim okresie.
clearTaskOnLaunch

Gdy ten atrybut jest ustawiony na "true" w głównej aktywności zadania, zadanie jest usuwana z aktywności na poziomie głównym za każdym razem, gdy użytkownik opuści zadanie lub wraca do niego. Innymi słowy, jest to przeciwieństwo alwaysRetainTaskState użytkownik zawsze wraca do zadania w stanie początkowym, nawet po opuszczeniu tylko na chwilę.

finishOnTaskLaunch

Ten atrybut wygląda tak: clearTaskOnLaunch, ale dotyczy on pojedynczego działania, a nie całego zadania. Może też powodować dowolne działanie do zakończenia oprócz aktywności głównej. Kiedy jest ustawiona na "true", będzie to część zadania tylko w bieżącej sesji. Jeśli użytkownik opuści zadanie, a następnie wróci do niego, zadanie nie będzie już dostępne.

Rozpocznij zadanie

Możesz skonfigurować aktywność jako punkt wejścia dla zadania, nadając mu intencję filtr z "android.intent.action.MAIN" jako określonym działaniem i "android.intent.category.LAUNCHER" jako określoną kategorię:

<activity ... >
    <intent-filter ... >
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    ...
</activity>

Tego rodzaju filtr intencji powoduje, że ikona i etykieta aktywności są wyświetlać w Menu z aplikacjami, umożliwiając użytkownikom uruchomienie aktywności w dowolnym momencie po uruchomieniu i powrót do utworzonego zadania.

Ta druga umiejętność jest ważna. Użytkownicy muszą mieć możliwość opuszczenia zadania, a następnie wróć do niej później za pomocą tego programu uruchamiającego aktywność. Z tego powodu używaj tylko dwa tryby uruchamiania, które oznaczają działania jako zawsze inicjujące zadanie, "singleTask" i "singleInstance", gdy aktywność ma ACTION_MAIN i CATEGORY_LAUNCHER. filtr.

Wyobraź na przykład, co mogłoby się stać, gdyby brakowało filtra: intencja uruchamia aktywność "singleTask", inicjuje nowe zadanie, a użytkownik poświęca na to trochę czasu. Następnie użytkownik używa przycisku strony głównej lub gest. Zadanie zostanie wysłane w tle i nie będzie widoczne. Gdy użytkownik nie ma możliwości powrotu do zadania, ponieważ nie jest ono reprezentowane w aplikacji Menu z aplikacjami.

Jeśli nie chcesz, aby użytkownik mógł wrócić do ustaw <activity> finishOnTaskLaunch elementu do "true". Więcej informacji znajdziesz w sekcji o usuwaniu tylnego stosu.

Dodatkowe informacje o sposobie reprezentowania zadań i działań oraz zarządzania nimi na ekranie Ostatnie jest dostępny w menu Ostatnie ekranu.

Więcej materiałów