Forståelse af lanceringstilstand for aktivitet i Android

Deling er omsorgsfuldt!

Lanceringstilstand for aktivitet spiller en vigtig rolle for vedligeholdelse af opgaven og backstacken. Før vi forklarer lanceringstilstanden, skal vi først forstå, hvad opgave og backstack er?

Task

En opgave er en “stak af aktiviteter” i din applikation. Hvis en aktivitet sendes til baggrunden (f.eks. ved at trykke på HOME-tasten, mens den vises), sendes hele opgaven (og alle aktiviteterne i den) også tilbage. Hvis brugeren derefter klikker på din applikation, kommer opgaven (og rækkefølgen af dens aktiviteter) frem. Med andre ord: En opgave er en samling af aktiviteter, som brugerne interagerer med, når de udfører et bestemt arbejde. Aktiviteterne er arrangeret i en stak – backstack) – i den rækkefølge, som hver aktivitet åbnes i.

Så grundlæggende Når en bruger starter en app fra home-ikonet, navigerer den gennem forskellige skærme, så forskellige aktiviteter placeres oven på hinanden. Denne samling af aktiviteter er kendt som opgaver.

Back Stack

Aktiviteterne er arrangeret i den rækkefølge, som hver aktivitet er åbnet. Denne vedligeholdte stak kaldes Back Stack. Når du starter en ny aktivitet ved hjælp af startActivity(), “skubber” det en ny aktivitet ind i din opgave og lægger den forrige aktivitet i den bageste stak.

Når du trykker på back-knappen, “popper” den øverste aktivitet og fjerner den fra den bageste stak og tager dig tilbage til den forrige aktivitet.

Launch Mode

En “launch mode” er den måde, hvorpå en ny instans af en aktivitet skal tilknyttes til den aktuelle opgave. Starttilstande kan defineres ved hjælp af en af to mekanismer:

  1. Gennem deklaration i AndroidManifest.xml-filen
  2. Gennem tilføjelse af flaget med Intent.

Der er fire typer, hvis starttilstand for aktivitet. Disse er:

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

Manifest-fil: Når du erklærer en aktivitet i en manifestfil, kan du angive, hvordan aktiviteten skal knyttes til opgaver, når den starter.

Exp:

<activity android:launchMode = ../>

Intent Flag:

Android indeholder også aktivitetsflag, hvormed du kan ændre standardadfærden for aktivitetens tilknytning til opgaver, når du starter den via startActivity()-metoden. Disse flagværdier kan videregives via Intent ekstra data.

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

standard (standard) : Dette er den almindelige tilstand for de fleste aktiviteter. flere instanser af aktivitetsklassen kan instantieres, og flere instanser kan tilføjes til den samme opgave eller forskellige opgaver.

Eksempel:
Sæt, du har aktiviteterne A, B, C og D, og din aktivitet B har “launch mode = standard”. Nu starter du igen aktivitet B –
Status for aktivitetsstakken før start B
A -> B -> C -> D
Status for aktivitetsstakken efter start B
A -> B -> C -> D -> D -> B

singleTop : Forskellen i forhold til standarden er, at hvis der allerede findes en instans af aktiviteten øverst i den aktuelle opgave, og systemet videresender intentionen til denne aktivitet, vil der ikke blive oprettet nogen ny instans, fordi den vil udløse en metodeonNewIntent() i stedet for at oprette et nyt objekt.

Eksempel:
Fald 1:
Sæt, at du har aktiviteterne A, B og C, og at din aktivitet D har “launch mode = singleTop”. Nu starter du aktivitet D –
Status af aktivitetsstakken før start D
A -> B -> C
Status af aktivitetsstakken efter start D aktivitet
A -> B -> C -> D (Her starter D som sædvanlig)
Fælde 2:
Sæt, du har A, B, C og D aktiviteter, og din aktivitet D har “launch mode = singleTop”. Nu lancerer du igen aktivitet D –
State of Activity Stack before launch D
A -> B -> C -> D
State of Activity Stack after launch D activity
A -> B -> C -> D (Her bliver den gamle instans kaldt og intent data rute gennem onNewIntent() callback)

singleTask : En ny opgave vil altid blive oprettet, og en ny instans vil blive skubbet til opgaven som rod. Hvis der imidlertid findes en aktivitetsinstans i en hvilken som helst opgave, videresender systemet hensigten til den pågældende aktivitetsinstans via metodeonNewIntent()-opkaldet. I denne tilstand kan aktivitetsinstanser skubbes til den samme opgave. Denne tilstand er nyttig for aktiviteter, der fungerer som indgangspunkter.

Eksempel:
Fald 1:
Sæt, at du har aktiviteterne A, B og C, og at din aktivitet D har “launch mode = singleTask”. Nu starter du aktivitet D –
Status af aktivitetsstakken før start D
A -> B -> C
Status af aktivitetsstakken efter start D aktivitet
A -> B -> C -> D (Her starter D som sædvanligt)
Fælde 2:
Sæt, du har A, B, C og D aktiviteter, og din aktivitet B har “launch mode = singleTask”. Nu lancerer du igen aktivitet B-
State of Activity Stack before launch D
A -> B -> C -> D
State of Activity Stack after launch B activity
A -> B (Her bliver den gamle instans kaldt, og intent data rute gennem onNewIntent() callback)
Og bemærk også, at C og D aktiviteter bliver ødelagt her.

singleInstance : Samme som,singleTask bortset fra, at ingen aktivitetsinstans kan skubbes ind i samme opgave som singleInstance‘erne. Følgelig er aktiviteten med lanceringstilstand altid i en enkelt aktivitetsinstansopgave. Dette er en meget specialiseret tilstand og bør kun bruges i applikationer, der er implementeret udelukkende som én aktivitet.

Eksempel:
Fald 1:
Sæt, at du har aktiviteterne A, B og C, og at din aktivitet D har “launch mode = singleInstance”. Nu lancerer du aktivitet D –
State of Activity Stack before launch D
A -> B -> C
State of Activity Stack after launch D activity
Task1-A -> B -> C
State of Activity Stack after launch D activity
Task1-A -> B -> C
Task2-D (her vil D være i en anden opgave)
Nu, hvis du fortsætter dette og starter E og D, vil stakken se ud som-
Task1-A -> B -> C -> E
Task2-D
Fælde 2:
Sæt, at du har aktiviteterne A, B og C i en opgave, og aktivitet D er i en anden opgave med “launch mode = singleInstance”. Nu lancerer du igen aktivitet D-
State of Activity Stack before launch D
Task1-A -> B -> C
Task2-D
State of Activity Stack after launch B activity
Task1-A -> B -> C
Task2-D (Her bliver den gamle instans kaldt og intent data rute gennem onNewIntent() callback)

FLAG_ACTIVITY_NEW_TASK : Samme som værdiensingleTask i Manifest-filen (se ovenfor).

FLAG_ACTIVITY_SINGLE_TOP : Samme som værdiensingleTop i Manifest-filen (se ovenfor).

FLAG_ACTIVITY_CLEAR_TOP : Hvis den aktivitet, der startes, allerede kører i den aktuelle opgave, så i stedet for at starte en ny instans af denne aktivitet, ødelægges alle de andre aktiviteter ovenpå den, og denne intent leveres til den genoptagne instans af aktiviteten (nu ovenpå), dog.onNewIntent() Der er ingen tilsvarende værdi i Manifest-filen, der giver denne adfærd. Jeg brugte reference til denne artikel er her og her.

Please do abonnere e-mail for at få alle nyhedsbreve fra denne blog, og hvis du føler, at dette indlæg vil hjælpe dig med at forstå bedre, så glem ikke at abonnere, dele og kommentere nedenfor. Ok, så vil jeg se dig i min næste tutorial indtil da nyde dit liv og glad kodning 🙂

0 0 stemme
Artikelbedømmelse

Jeg er en meget entusiastisk Android-udvikler til at bygge solide Android-apps. Jeg har en stor interesse i at udvikle til Android og har udgivet apps til Google Play Store. Jeg er altid åben for at lære nye teknologier. Hvis du har brug for hjælp, så smid en besked når som helst på [email protected]