Aktiivisuuden käynnistystilan ymmärtäminen Androidissa

Jakaminen on huolenpitoa!

Aktiivisuuden käynnistystila on tärkeässä roolissa tehtävän ja takapinon ylläpitämisessä. Ennen kuin selitämme käynnistystilan, meidän on ensin ymmärrettävä, mikä on tehtävä- ja takapino?

Tehtävä

Tehtävä on ”toimintojen pino” sovelluksessasi. Jos jokin Activity lähetetään taustalle (esimerkiksi painamalla HOME-näppäintä sen katselun aikana), koko Task (ja kaikki sen sisällä olevat Activities) lähetetään myös takaisin. Jos käyttäjä sitten napsauttaa sovellustasi, tehtävä (ja sen aktiviteettien järjestys) tulee esiin. Toisin sanoen Tehtävä on kokoelma toimintoja, joiden kanssa käyttäjät ovat vuorovaikutuksessa suorittaessaan tiettyä työtä. Aktiviteetit on järjestetty pinoihin – takapinoihin – siinä järjestyksessä, jossa kukin aktiviteetti on avattu.

Siten periaatteessa Kun käyttäjä käynnistää sovelluksen kotikuvakkeesta, se navigoi eri ruutujen läpi niin, että eri aktiviteetit asetetaan päällekkäin. Tätä toimintojen kokoelmaa kutsutaan tehtäviksi.

Back Stack

Toiminnot on järjestetty siihen järjestykseen, jossa kukin toiminto on avattu. Tätä ylläpidettyä pinoa kutsutaan Back Stackiksi. Kun käynnistät uuden aktiviteetin käyttämällä startActivity() -toimintoa, se ”työntää” uuden aktiviteetin tehtävään ja laittaa edellisen aktiviteetin takapinoon.

Kun painat back-painiketta, niin ”ponnahtaa” päällimmäinen aktiviteetti ja poistaa sen takapinosta ja vie sinut takaisin edelliseen aktiviteettiin.

Käynnistystila

Käynnistystila tarkoittaa tapaa, jolla aktiviteetin uusi instanssi liitetään nykyiseen tehtävään. Käynnistystilat voidaan määritellä jollakin kahdesta mekanismista:

  1. Julkistamalla AndroidManifest.xml-tiedostossa
  2. Lisäämällä lippu Intentillä.

On olemassa neljä tyyppiä, jos aktiviteetin käynnistystila. Nämä ovat:

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

Manifest-tiedosto: Kun aktiviteetti ilmoitetaan manifestitiedostossa, voit määrittää, miten aktiviteetti liitetään tehtäviin, kun se käynnistyy.

Exp:

<activity android:launchMode = ../>

Intent Flag: Android tarjoaa myös Activity Flagit, joiden avulla voit muuttaa oletuskäyttäytymistä Activityn yhdistämisessä tehtäviin, kun se käynnistetään startActivity()-metodilla. Nämä lippujen arvot voidaan välittää Intent-lisätietojen kautta.

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

standard (oletus) : Tämä on yleinen tila useimmille aktiviteeteille.Aktiviteettiluokan useita instansseja voidaan instansioida ja useita instansseja voidaan lisätä samaan tehtävään tai eri tehtäviin.

Esimerkki:
Esimerkiksi: Oletetaan, että sinulla on aktiviteetteja A, B, B, C, C, C ja D ja aktiviteettisi B:llä on käytössäsäsi ”Käynnistystila = standardi”. Nyt käynnistät taas aktiviteetin B –
Toimintopinon tila ennen käynnistystä B
A -> B -> C -> D
Toimintopinon tila käynnistyksen jälkeen B
A -> B -> C -> C -> C -> C -> D -> D -> B

singleTop : Erona standardiin on se, että jos aktiviteetin instanssi on jo olemassa nykyisen tehtävän yläosassa ja järjestelmä ohjaa aikomuksen tähän aktiviteettiin, uutta instanssia ei luoda, koska se laukaisee metodinonNewIntent() uuden objektin luomisen sijasta.

Esimerkki:
Tapaus 1:
Esitetään, että sinulla on A-, B- ja C-aktiviteetit ja aktiviteetilla D on ”launch mode = singleTop”. Nyt käynnistät aktiviteetin D –
Toimintopinon tila ennen käynnistystä D
A -> B -> C
Toimintopinon tila käynnistyksen jälkeen D aktiviteetti
A -> B -> C -> D (Tässä D käynnistetään tavalliseen tapaan)
Tapaus 2:
Etsioletetaan, että sinulla on A-, B-, C- ja D-aktiviteetteja ja aktiviteetillasi D:lläsi on ”käynnistystila = singleTop”. Nyt käynnistät taas aktiviteetin D –
Toimintopinon tila ennen käynnistystä D
A -> B -> C -> D
Toimintopinon tila käynnistyksen jälkeen D aktiviteetti
A -> B -> C -> D (Tässä vanhaa instanssia kutsutaan ja aikomustieto reitittyy onNewIntent() takaisinkutsun kautta)

singleTask : Uusi tehtävä luodaan aina ja uusi instanssi työnnetään tehtävään juureksi. Jos kuitenkin jokin aktiviteetti-instanssi on olemassa missä tahansa tehtävässä, järjestelmä reitittää aikomuksen kyseiseen aktiviteetti-instanssiin metodinonNewIntent() kutsun kautta. Tässä tilassa aktiviteetti-instansseja voidaan työntää samaan tehtävään. Tämä tila on hyödyllinen aktiviteeteille, jotka toimivat sisääntulopisteinä.

Esimerkki:
Tapaus 1:
Esitettäköön, että sinulla on A-, B- ja C-aktiviteetit ja aktiviteetilla D on ”launch mode = singleTask”. Nyt käynnistät aktiviteetin D –
Toimintopinon tila ennen käynnistystä D
A -> B -> C
Toimintopinon tila käynnistyksen jälkeen D aktiviteetti
A -> B -> C -> D (Tässä D käynnistetään tavalliseen tapaan)
Tapaus 2:
Es oletetaan, että sinulla on A-, B-, C- ja D-aktiviteetteja ja aktiviteettisi B:lläsi on ”käynnistysajatus (launch mode) = ”yksittäinen tehtävä”. Nyt käynnistät taas aktiviteetin B-
Toimintopinon tila ennen käynnistystä D
A -> B -> C -> D
Toimintopinon tila käynnistyksen jälkeen B-aktiviteetti
A -> B (Tässä vanhaa instanssia kutsutaan ja aikomustietoja reititetään onNewIntent()-kutsun kautta)
Huomaa myös, että C- ja D-aktiviteetit tuhoutuvat tässä.

singleInstance : Sama kuin,singleTask paitsi että ei aktiviteetti-instanssi voidaan työntää samaan tehtävään singleInstance:n kanssa. Vastaavasti käynnistystilassa oleva aktiviteetti on aina yhden aktiviteetti-instanssin tehtävässä. Tämä on hyvin erikoistunut tila, ja sitä tulisi käyttää vain sovelluksissa, jotka on toteutettu kokonaan yhtenä aktiviteettina.

Esimerkki:
Tapaus 1:
Esitettäköön, että sinulla on A-, B- ja C-aktiviteetit ja aktiviteetilla D on ”launch mode = singleInstance”. Nyt käynnistät aktiviteetin D –
Toimintopinon tila ennen käynnistystä D
A -> B -> C
Toimintopinon tila käynnistyksen jälkeen D:n aktiviteetti
Task1-A -> B – -> C
Task2-D (tässä D on eri tehtävässä)
Nyt jos jatkat tätä ja käynnistät E:n ja D:n niin pino näyttää seuraavalta-
Task1-A -> B -> C -> E
Task2-D
Tapaus 2:
Oletetaan, että aktiviteetit A, B, C ovat yhdessä tehtävässä ja aktiviteetti D on toisessa tehtävässä, jossa on ”launch mode = singleInstance”. Nyt käynnistät taas aktiviteetin D-
Toimintopinon tila ennen käynnistystä D
Task1-A -> B -> C
Task2-D
Toimintopinon tila käynnistyksen jälkeen B-aktiviteetti
Task1-A -> B -> C
Task2-D (Täällä vanhaa instanssia kutsutaan ja aikomustieto reititellään onNewIntent()-kutsun välityksellä)

FLAG_ACTIVITY_NEW_TASK : Sama kuin arvosingleTask Manifest-tiedostossa (ks. edellä).

FLAG_ACTIVITY_SINGLE_TOP : Sama kuin arvosingleTop Manifest-tiedostossa (ks. edellä).

FLAG_ACTIVITY_CLEAR_TOP : Jos käynnistettävä aktiviteetti on jo käynnissä nykyisessä tehtävässä, niin sen sijaan, että käynnistettäisiin uusi instanssi kyseisestä aktiviteetista, kaikki muut aktiviteetit, jotka ovat aktiviteetin päällä, tuhotaan ja tämä intent toimitetaan kuitenkin aktiviteetin uudelleenkäynnistettyyn instanssiin (joka on nyt päällimmäisenä).onNewIntent() Manifest-tiedostossa ei ole vastaavaa arvoa, joka aiheuttaisi tämän käyttäytymisen. Käytin viittaus tähän artikkeliin ovat täällä ja täällä.

Tilaa sähköpostia saadaksesi kaikki tämän blogin uutiskirjeet ja jos sinusta tuntuu, että tämä viesti auttaa sinua ymmärtämään paremmin, älä unohda tilata, jakaa ja kommentoida alla. Ok, sitten näemme seuraavassa opetusohjelmassani siihen asti nauti elämästäsi ja onnellista koodausta 🙂

0 0 ääni
Artikkelin arvostelu

Olen erittäin innostunut Android-kehittäjä rakentamaan vankkoja Android-ohjelmia. Olen erittäin kiinnostunut kehittämään Androidille ja olen julkaissut sovelluksia Google Play Storeen. Olen aina avoin oppimaan uusia teknologioita. Jos tarvitset apua, pistä viestiä milloin tahansa osoitteeseen [email protected]