Pochopení režimu spuštění aktivity v systému Android

Sdílení je péče!

Režim spuštění aktivity hraje důležitou roli při udržování zásobníku úloh a zpět. Před vysvětlením režimu spouštění musíme nejprve pochopit, co je to úloha a zpětný zásobník?

Úloha

Úloha je „zásobník aktivit“ ve vaší aplikaci. Pokud je nějaká Aktivita odeslána na pozadí (například stisknutím klávesy HOME při jejím prohlížení), pak se celá Úloha (a všechny Aktivity v ní) odešlou také zpět. Pokud pak uživatel klikne na vaši aplikaci, úloha (a pořadí jejích aktivit) se vrátí dopředu. Jinými slovy: Úloha je soubor aktivit, s nimiž uživatelé interagují při provádění určité práce. Tyto činnosti jsou uspořádány do zásobníku – back stack) – v pořadí, v jakém jsou jednotlivé činnosti otevřeny.

Takže v podstatě Když uživatel spustí aplikaci z domovské ikony, prochází různými obrazovkami, takže různé činnosti jsou umístěny nad sebou. Tato kolekce aktivit je známá jako úkoly.

Zpětný zásobník

Aktivity jsou uspořádány v pořadí, v jakém jsou jednotlivé aktivity otevřeny. Tento udržovaný zásobník se nazývá Back Stack. Když spustíte novou aktivitu pomocí funkce startActivity(), „posune“ novou aktivitu na váš úkol a předchozí aktivitu umístí do zadního zásobníku.

Pokud stisknete tlačítko zpět, pak „vyskočí“ nejvyšší aktivita a odstraní ji ze zadního zásobníku a přenese vás zpět na předchozí aktivitu.

Režim spuštění

„Režim spuštění“ je způsob, jakým má být nová instance aktivity spojena s aktuálním úkolem. Režimy spuštění lze definovat pomocí jednoho ze dvou mechanismů:

  1. Deklarováním v souboru AndroidManifest.xml
  2. Přidáním příznaku se záměrem.

Existují čtyři typy režimu spuštění aktivity. Jsou to:

  1. standardní
  2. singleTop
  3. singleTask
  4. SingleInstance

Soubor Manifest: Při deklarování aktivity v souboru manifest můžete určit, jak se má aktivita při spuštění spojit s úlohami.

Exp:

<activity android:launchMode = ../>

Příznak záměru: Android také poskytuje příznaky aktivity, pomocí kterých můžete změnit výchozí chování asociace aktivity s úkoly při jejím spuštění pomocí metody startActivity(). Hodnoty těchto příznaků lze předat prostřednictvím dodatečných údajů Intent.

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

standard (výchozí) : Toto je běžný režim pro většinu aktivit. lze instancovat více instancí třídy aktivity a přidat více instancí ke stejné úloze nebo různým úlohám.

Příklad:
Předpokládejme, že máte aktivity A, B, C a D a vaše aktivita B má „režim spuštění = standardní“. Nyní opět spouštíte aktivitu B –
Stav zásobníku aktivit před spuštěním B
A -> B -> C -> D
Stav zásobníku aktivit po spuštění B
A -> B -> C -> D -> B

singleTop : Rozdíl oproti standardu spočívá v tom, že pokud instance aktivity již existuje na vrcholu aktuální úlohy a systém přesměruje záměr na tuto aktivitu, nevytvoří se žádná nová instance, protože se místo vytvoření nového objektu spustí metodaonNewIntent().

Příklad:
Případ 1:
Předpokládejme, že máte aktivity A, B a C a vaše aktivita D má „launch mode = singleTop“. Nyní spouštíte aktivitu D –
Stav zásobníku aktivit před spuštěním D
A -> B -> C
Stav zásobníku aktivit po spuštění aktivity D
A -> B -> C -> D (Zde se D spouští jako obvykle)
Případ 2:
Předpokládejme, že máte aktivity A, B, C a D a vaše aktivita D má „launch mode = singleTop“. Nyní opět spouštíte aktivitu D –
Stav zásobníku aktivit před spuštěním D
A -> B -> C -> D
Stav zásobníku aktivit po spuštění aktivity D
A -> B -> C -> D (Zde se zavolá stará instance a data záměru putují přes onNewIntent() zpětné volání)

singleTask : Vždy se vytvoří nová úloha a nová instance se přesune do úlohy jako kořen. Pokud však v nějaké úloze existuje instance aktivity, systém přesměruje záměr na tuto instanci aktivity prostřednictvím volání metodyonNewIntent(). V tomto režimu mohou být instance aktivit přesunuty do stejné úlohy. Tento režim je užitečný pro aktivity, které fungují jako vstupní body.

Příklad:
Případ 1:
Předpokládejme, že máte aktivity A, B a C a vaše aktivita D má „launch mode = singleTask“. Nyní spouštíte aktivitu D –
Stav zásobníku aktivit před spuštěním D
A -> B -> C
Stav zásobníku aktivit po spuštění aktivity D
A -> B -> C -> D (Zde se D spouští jako obvykle)
Případ 2:
Předpokládejme, že máte aktivity A, B, C a D a vaše aktivita B má „launch mode = singleTask“. Nyní opět spouštíte aktivitu B-
Stav zásobníku aktivit před spuštěním D
A -> B -> C -> D
Stav zásobníku aktivit po spuštění aktivity B
A -> B (Zde se zavolá stará instance a data záměru putují přes zpětné volání onNewIntent())
Také si všimněte, že aktivity C a D se zde zničí.

singleInstance : Stejné jako,singleTask s tím rozdílem, že do stejné úlohy singleInstanceje možné vložit instanci žádné aktivity. Podle toho je aktivita s režimem spouštění vždy v jedné úloze instance aktivity. Tento režim je velmi specializovaný a měl by se používat pouze v aplikacích, které jsou implementovány výhradně jako jedna aktivita.

Příklad:
Případ 1:
Předpokládejme, že máte aktivity A, B a C a vaše aktivita D má „launch mode = singleInstance“. Nyní spouštíte aktivitu D –
Stav zásobníku aktivit před spuštěním D
A -> B -> C
Stav zásobníku aktivit po spuštění aktivity D
Task1-A -> B -> C
Úloha2-D (zde bude D v jiné úloze)
Pokud nyní budete pokračovat a spustíte E a D, pak bude zásobník vypadat takto-
Úloha1-A -> B -> C -> E
Úloha2-D
Případ 2:
Předpokládejme, že máte aktivity A, B, C v jedné úloze a aktivita D je v jiné úloze s „launch mode = singleInstance“. Nyní opět spouštíte aktivitu D-
Stav zásobníku aktivit před spuštěním D
Task1-A -> B -> C
Task2-D
Stav zásobníku aktivit po spuštění aktivity B
Task1-A -> B -> C
Task2-D (Zde se zavolá stará instance a data záměru putují přes zpětné volání onNewIntent())

FLAG_ACTIVITY_NEW_TASK : Stejné jako hodnotasingleTask v souboru Manifest (viz výše).

FLAG_ACTIVITY_SINGLE_TOP : Stejné jako hodnotasingleTop v souboru Manifest (viz výše).

FLAG_ACTIVITY_CLEAR_TOP : Pokud je spouštěná aktivita již spuštěna v aktuální úloze, pak místo spuštění nové instance této aktivity jsou všechny ostatní aktivity nad ní zničeny a tento záměr je doručen obnovené instanci aktivity (nyní na vrcholu), nicméně.onNewIntent() V souboru Manifest není žádná odpovídající hodnota, která by způsobila toto chování. Reference, které jsem použil pro tento článek, jsou zde a zde.

Prosím, přihlaste se k odběru e-mailu, abyste dostali všechny novinky tohoto blogu, a pokud máte pocit, že vám tento příspěvek pomůže lépe porozumět, nezapomeňte se přihlásit k odběru, sdílet a komentovat níže. Dobře, tak se uvidíme v mém dalším tutoriálu, do té doby si užijte život a šťastné kódování 🙂

0 0 hlasů
Hodnocení článku

Jsem velmi nadšený Android vývojář pro vytváření solidních Android aplikací. Mám velký zájem o vývoj pro Android a publikoval jsem aplikace v obchodě Google Play. Jsem vždy otevřený učení se novým technologiím. V případě jakékoli pomoci se kdykoli ozvěte na [email protected]

.