Zrozumienie trybu uruchamiania aktywności w Androidzie

Sharing is caring!

Tryb uruchamiania aktywności odgrywa ważną rolę w utrzymaniu zadania i stosu wstecznego. Zanim wyjaśnimy tryb uruchamiania, musimy najpierw zrozumieć, co to jest zadanie i stos tylny?

Zadanie

Zadanie jest „stosem działań” w aplikacji. Jeśli jakaś aktywność zostanie odesłana do tła (np. przez naciśnięcie klawisza HOME podczas jej przeglądania), to całe Zadanie (i wszystkie aktywności wewnątrz niego) również zostaną odesłane. Jeśli użytkownik następnie kliknie na aplikację, zadanie (i kolejność jego działań) pojawi się ponownie. Innymi słowy, Zadanie jest zbiorem aktywności, z którymi użytkownicy wchodzą w interakcję podczas wykonywania określonego zadania. Działania są ułożone w stosie (back stack) – w kolejności, w której każda aktywność jest otwarta.

Więc w zasadzie Kiedy użytkownik uruchamia aplikację z ikony domu, nawiguje przez różne ekrany, więc różne działania umieszczone na górze siebie. Ta kolekcja działań jest znany jako tasks.

Back Stack

Activities są ułożone w kolejności, w której każda aktywność jest otwarty. Ten zachowany stos nazywany jest stosem wstecznym. Kiedy rozpoczynasz nową aktywność używając startActivity(), to „wypycha” nową aktywność na twoje zadanie, i umieszcza poprzednią aktywność na tylnym stosie.

Kiedy naciskasz przycisk wstecz to „wyskakuje” najwyższa aktywność i usuwa ją z tylnego stosu i zabiera cię z powrotem do poprzedniej aktywności.

Tryb uruchamiania

Tryb uruchamiania” jest sposobem, w jaki nowa instancja aktywności ma być powiązana z bieżącym zadaniem. Tryby uruchamiania mogą być zdefiniowane przy użyciu jednego z dwóch mechanizmów:

  1. Poprzez deklarację w pliku AndroidManifest.xml
  2. Poprzez dodanie flagi z Intencją.

Istnieją cztery typy jeśli tryb uruchamiania aktywności. Są to:

  1. standard
  2. singleTop
  3. singleTask
  4. SingleInstance

Plik manifestu: Deklarując aktywność w pliku manifestu, można określić, w jaki sposób aktywność powinna kojarzyć się z zadaniami po uruchomieniu.

Exp:

<activity android:launchMode = ../>

Flaga intencji: Android zapewnia również flagi aktywności, dzięki którym można zmienić domyślne zachowanie asocjacji aktywności z zadaniami podczas uruchamiania jej za pomocą metody startActivity(). Te wartości flag mogą być przekazywane przez Intent dodatkowych danych.

FLAG_ACTIVITY_NEW_TASK -> similar to "launchMode = singleTask"FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_SINGLE_TOP -> similar to "launchMode = singleTop"FLAG_ACTIVITY_CLEAR_TOP

standard (domyślnie) : Jest to tryb wspólny dla większości działań.Wiele instancji klasy aktywności mogą być instantiated i wiele instancji mogą być dodawane do tego samego zadania lub różnych zadań.

Przykład:
Załóżmy, że masz A, B, C, i D działalności i działalności B ma „tryb uruchamiania = standard”. Teraz ponownie uruchamiasz aktywność B –
Stan stosu aktywności przed uruchomieniem B
A -> B -> C -> D
Stan stosu aktywności po uruchomieniu B
A -> B -> C -> D -> B

singleTop : Różnica w stosunku do standardu polega na tym, że jeśli instancja aktywności już istnieje na szczycie bieżącego zadania i system skieruje intencję do tej aktywności, nie zostanie utworzona nowa instancja, ponieważ odpali metodęonNewIntent() zamiast tworzyć nowy obiekt.

Przykład:
Przypadek 1:
Załóżmy, że masz aktywności A, B i C, a twoja aktywność D ma „tryb uruchamiania = singleTop”. Teraz uruchamiasz aktywność D –
Stan stosu aktywności przed uruchomieniem D
A -> B -> C
Stan stosu aktywności po uruchomieniu D aktywność
A -> B -> C -> D (tutaj D uruchomić jak zwykle)
Case 2:
Załóżmy, że masz A, B, C i D działalności i aktywność D ma „tryb uruchamiania = singleTop”. Teraz ponownie uruchamiasz aktywność D –
Stan stosu aktywności przed uruchomieniem D
A -> B -> C -> D
Stan stosu aktywności po uruchomieniu D aktywność
A -> B -> C -> D (Tutaj stara instancja jest wywoływana i intencjonalna trasa danych przez onNewIntent() callback)

singleTask : Nowe zadanie zawsze zostanie utworzone i nowa instancja zostanie wepchnięta do zadania jako root. Jeśli jednak jakaś instancja aktywności istnieje w dowolnym zadaniu, system kieruje intencję do tej instancji aktywności poprzez wywołanie metodyonNewIntent(). W tym trybie instancje aktywności mogą być pchane do tego samego zadania. Ten tryb jest przydatny dla aktywności, które działają jako punkty wejścia.

Przykład:
Przypadek 1:
Załóżmy, że masz aktywności A, B i C, a twoja aktywność D ma „tryb uruchamiania = singleTask”. Teraz uruchamiasz aktywność D –
Stan stosu aktywności przed uruchomieniem D
A -> B -> C
Stan stosu aktywności po uruchomieniu aktywności D
A -> B -> C -> D (tutaj D uruchomić jak zwykle)
Przypadek 2:
Załóżmy, że masz A, B, C, i D działalności i działalność B ma „tryb uruchamiania = singleTask”. Teraz ponownie uruchamiasz aktywność B-
Stan stosu aktywności przed uruchomieniem D
A -> B -> C -> D
Stan stosu aktywności po uruchomieniu aktywności B
A -> B (Tutaj stara instancja jest wywoływana, a dane intencji są przekazywane przez wywołanie zwrotne onNewIntent())
Zauważ, że aktywności C i D są niszczone.

singleInstance : To samo co,singleTask z wyjątkiem tego, że instancja żadnej aktywności nie może być wepchnięta do tego samego zadania singleInstance’s. Odpowiednio, aktywność z trybem uruchamiania jest zawsze w zadaniu z jedną instancją aktywności. Jest to bardzo wyspecjalizowany tryb i powinien być używany tylko w aplikacjach, które są zaimplementowane w całości jako jedna aktywność.

Przykład:
Przypadek 1:
Załóżmy, że masz aktywności A, B i C, a twoja aktywność D ma „tryb uruchamiania = singleInstance”. Teraz uruchamiasz aktywność D –
Stan stosu aktywności przed uruchomieniem D
A -> B -> C
Stan stosu aktywności po uruchomieniu D aktywność
Zadanie1-A -> B -> C
Zadanie1-A -> C> C
Zadanie2-D (tutaj D będzie w innym zadaniu)
Teraz jeśli będziesz to kontynuować i uruchomisz E i D to stos będzie wyglądał jak-
Zadanie1-A -> B -> C -> E
Zadanie2-D
Przypadek 2:
Załóżmy, że masz aktywności A, B, C w jednym zadaniu, a aktywność D jest w innym zadaniu z „trybem uruchamiania = singleInstance”. Teraz ponownie uruchamiasz aktywność D-
Stan stosu aktywności przed uruchomieniem D
Task1-A -> B -> C
Task2-D
Stan stosu aktywności po uruchomieniu B aktywność
Task1-A -> B -> C
Task2-D (Tutaj stara instancja jest wywoływana i dane intencji są przekazywane przez onNewIntent() callback)

FLAG_ACTIVITY_NEW_TASK : Taka sama jak wartośćsingleTask w pliku Manifest (patrz wyżej).

FLAG_ACTIVITY_SINGLE_TOP : Tak samo jak wartośćsingleTop w pliku Manifestu (patrz wyżej).

FLAG_ACTIVITY_CLEAR_TOP : Jeśli uruchamiana aktywność jest już uruchomiona w bieżącym zadaniu, to zamiast uruchamiać nową instancję tej aktywności, wszystkie inne aktywności na szczycie są niszczone i ta intencja jest dostarczana do wznowionej instancji aktywności (teraz na szczycie), chociaż.onNewIntent() Nie ma odpowiedniej wartości w pliku Manifestu, która produkuje to zachowanie. I używane odniesienia dla tego artykułu są tutaj i tutaj.

Proszę zrobić subskrypcji e-mail, aby uzyskać wszystkie biuletyny tego bloga i jeśli uważasz, że ten post pomoże Ci lepiej zrozumieć to nie zapomnij subskrybować, udostępniać i komentować poniżej. Ok, to do zobaczenia w moim następnym tutorialu do tego czasu cieszyć się życiem i szczęśliwego kodowania 🙂

0 0 vote
Article Rating

Jestem bardzo entuzjastycznym programistą Android do budowania solidnych aplikacji Android. Mam żywe zainteresowanie w rozwoju dla Androida i opublikowałem aplikacje w Google Play Store. Zawsze jestem otwarty na naukę nowych technologii. Jeśli potrzebujesz pomocy, skontaktuj się z nami pod adresem [email protected]

.