Inzicht in de lancering modus van de activiteit in Android
Delen is zorgzaam!
Lancering modus van de activiteit speelt een belangrijke rol bij het handhaven van de taak en de rug stack. Voordat we de launch mode uitleggen moeten we eerst begrijpen wat is de taak en back stack?
Task
Een taak is een “stapel van Activiteiten” in uw applicatie. Als een activiteit naar de achtergrond wordt gestuurd (bijvoorbeeld door op de HOME-toets te drukken terwijl u deze bekijkt), dan wordt de hele taak (en alle activiteiten daarin) ook teruggestuurd. Als de gebruiker vervolgens op uw toepassing klikt, komt de taak (en de volgorde van de activiteiten) naar voren. Met andere woorden, een taak is een verzameling van activiteiten waarmee gebruikers interacteren bij het uitvoeren van een bepaalde taak. De activiteiten zijn gerangschikt in een stapel – de achterste stapel – in de volgorde waarin elke activiteit wordt geopend.
Dus eigenlijk Wanneer een gebruiker een app start vanaf het home-pictogram, navigeert hij door verschillende schermen, zodat verschillende activiteiten boven op elkaar worden geplaatst. Deze verzameling van activiteiten is bekend als taken.
Back Stack
Activiteiten zijn gerangschikt in de volgorde waarin elke activiteit wordt geopend. Deze gehandhaafde stapel wordt Back Stack genoemd. Wanneer u een nieuwe activiteit met behulp van startActivity(), het “duwt” een nieuwe activiteit op uw taak, en zet de vorige activiteit in de back stack.
Zodra u op de knop terug dan “popt” de bovenste activiteit en verwijdert deze uit de back stack en brengt u terug naar de vorige activiteit.
Lunch Mode
Een “launch mode” is de manier waarop een nieuwe instantie van een activiteit moet worden geassocieerd met de huidige taak. Lanceermodi kunnen worden gedefinieerd met behulp van een van de twee mechanismen:
- Door te verklaren in AndroidManifest.xml bestand
- Door de vlag toe te voegen met Intent.
Er zijn vier soorten als lanceermodus van activiteit. Deze zijn:
- standard
- singleTop
- singleTask
- SingleInstance
Manifestbestand: Bij het declareren van een activiteit in een manifest-bestand, kunt u aangeven hoe de activiteit zich moet associëren met taken wanneer het start.
Exp:
<activity android:launchMode = ../>
Intent-vlag: Android biedt ook Activiteit vlaggen waarmee u het standaard gedrag van Activiteit associatie met Taken te wijzigen tijdens het starten via startActiviteit() methode. Deze vlaggen kunnen worden doorgegeven via Intent extra gegevens.
FLAG_ACTIVITY_NEW_TASK -> similar to "launchMode = singleTask"FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_SINGLE_TOP -> similar to "launchMode = singleTop"FLAG_ACTIVITY_CLEAR_TOP
standard
(standaard) : Dit is de standaardmodus voor de meeste activiteiten.Meerdere instanties van de activiteitsklasse kunnen worden geïnstantieerd en meerdere instanties kunnen worden toegevoegd aan dezelfde taak of verschillende taken.
Voorbeeld:
Voorstel dat u activiteiten A, B, C en D hebt en uw activiteit B heeft “startmodus = standaard”. Nu lanceert u opnieuw activiteit B –
Status van activiteitenstapel voor lancering B
A -> B -> C -> D
Status van activiteitenstapel na lancering B
A -> B -> C -> D -> B
singleTop
: Het verschil met de standaard is dat als er bovenaan de huidige taak al een instantie van de activiteit bestaat en het systeem de intentie naar deze activiteit routeert, er geen nieuwe instantie wordt gecreëerd omdat er een methodeonNewIntent()
wordt afgevuurd in plaats van een nieuw object te creëren.
Voorbeeld:
Geval 1:
Voorstel dat u activiteiten A, B, en C hebt en uw activiteit D heeft “launch mode = singleTop”. Nu lanceert u activiteit D –
Status van activiteitenstapel vóór lancering D
A -> B -> C
Status van activiteitenstapel na lancering D activiteit
A -> B -> C -> D (Hier lanceert D zoals gebruikelijk)
Voorstel 2:
Voorstel dat u activiteiten A, B, C en D hebt en uw activiteit D heeft “lanceringsmodus = singleTop”. Nu lanceert u opnieuw activiteit D –
Status van activiteitenstapel voor lancering D
A -> B -> C -> D
Status van activiteitenstapel na lancering D activiteit
A -> B -> C -> D (Hier wordt de oude instantie aangeroepen en de intent-gegevensroute via onNewIntent()
callback)
singleTask
: Er wordt altijd een nieuwe taak aangemaakt en een nieuwe instantie wordt als de root naar de taak geduwd. Als er echter een instantie van een activiteit bestaat in een taak, routeert het systeem de intentie naar die instantie van een activiteit via de methodeonNewIntent()
-aanroep. In deze modus kunnen activiteitinstanties naar dezelfde taak worden gepushed. Deze modus is handig voor activiteiten die als ingang fungeren.
Voorbeeld:
Geval 1:
Voorstel dat u activiteiten A, B en C hebt en dat activiteit D de “launch mode = singleTask” heeft. Nu lanceert u activiteit D –
Status van activiteitenstapel vóór lancering D
A -> B -> C
Status van activiteitenstapel na lancering D activiteit
A -> B -> C -> D (Hier lanceert D zoals gebruikelijk)
Geval 2:
Voorstel dat u activiteiten A, B, C en D hebt en uw activiteit B heeft “lanceringsmodus = enkelvoudige taak”. Nu lanceert u opnieuw activiteit B-
Status van activiteitenstapel voor lancering D
A -> B -> C -> D
Status van activiteitenstapel na lancering B activiteit
A -> B (Hier wordt oude instantie aangeroepen en intentiegegevens worden gerouteerd via onNewIntent() callback)
Ook wordt opgemerkt dat C- en D-activiteiten hier worden vernietigd.
singleInstance
: Hetzelfde als,singleTask
behalve dat de instantie van geen enkele activiteit in dezelfde taak van de singleInstance
’s kan worden geduwd. Dienovereenkomstig is de activiteit met lancering modus altijd in een enkele activiteit instantie taak. Dit is een zeer gespecialiseerde modus en mag alleen worden gebruikt in toepassingen die volledig als één activiteit zijn geïmplementeerd.
Voorbeeld:
Voorbeeld 1:
Voorstel dat u activiteiten A, B en C hebt en uw activiteit D heeft “launch mode = singleInstance”. Nu lanceert u activiteit D –
Status van activiteitenstapel vóór lancering D
A -> B -> C
Status van activiteitenstapel na lancering D activiteit
Taak1-A -> B -> C
.> C
Taak2-D (hier zal D in een andere taak zijn)
Nu als u dit voortzet en E en D start dan zal Stack eruit zien als-
Taak1-A -> B -> C -> E
Taak2-D
Geval 2:
Voorstel dat je A, B, C activiteiten in een taak hebt en activiteit D zit in een andere taak met “launch mode = singleInstance”. Nu lanceert u opnieuw activiteit D-
Status van activiteitenstapel voor lancering D
Task1-A -> B -> C
Task2-D
Status van activiteitenstapel na lancering B activiteit
Task1-A -> B -> C
Task2-D (Hier wordt oude instantie aangeroepen en intentiegegevens route via onNewIntent() callback)
FLAG_ACTIVITY_NEW_TASK
: Hetzelfde als de waardesingleTask
in het Manifest-bestand (zie hierboven).
FLAG_ACTIVITY_SINGLE_TOP
: Hetzelfde als de waardesingleTop
in het Manifest-bestand (zie hierboven).
FLAG_ACTIVITY_CLEAR_TOP
: Als de activiteit die wordt gestart al wordt uitgevoerd in de huidige taak, worden in plaats van een nieuwe instantie van die activiteit te starten, alle andere activiteiten erbovenop vernietigd en wordt deze intent geleverd aan de instantie van de activiteit die wordt hervat (nu bovenaan), hoewel.onNewIntent()
Er is geen overeenkomstige waarde in het Manifest-bestand die dit gedrag veroorzaakt. Ik gebruikte referentie voor dit artikel zijn hier en hier.
Schrijft u zich in e-mail naar alle nieuwsbrieven van deze blog te krijgen en als je het gevoel dat dit bericht zal u helpen om beter te begrijpen dan vergeet niet te abonneren, delen en commentaar hieronder. Ok, dan zie ik je in mijn volgende tutorial tot dan geniet van je leven en gelukkig coderen 🙂
Ik ben een zeer enthousiaste Android ontwikkelaar om solide Android apps te bouwen. Ik heb een grote interesse in het ontwikkelen voor Android en heb apps gepubliceerd in de Google Play Store. Ik sta altijd open voor het leren van nieuwe technologieën. Als u hulp nodig hebt, kunt u ons altijd bellen op [email protected]