Hva er Android Aktivitetslivssyklusen?

I mitt forrige innlegg lærte du at Intents la oss sende meldinger fra en Android-komponent til en annen. Vel, en veldig viktig type komponent er en aktivitet. 

Aktiviteter er en grunnleggende del av Android app utvikling. Og det er umulig å forstå aktiviteter uten å forstå deres livssykluser. I dette innlegget lærer du alt om aktivitetslivssyklusen.

Aktivitetslivssyklus

En aktivitet er en enkelt skjerm i Android. Det er som et vindu i en stasjonær app, eller en ramme i et Java-program. En aktivitet lar deg plassere alle dine UI-komponenter eller widgets sammen på skjermen.

Det er viktig å forstå at en aktivitet har en livssyklus: det vil si at den kan være i en av flere forskjellige stater, avhengig av hva som skjer med appen og med brukerinteraksjonen. 

Livscyklusmetoder

La oss se nærmere på livssyklusen til en Android-aktivitet. Hver gang aktivitetsstatus endres, blir en av følgende livssyklusmetoder kalt Aktivitetsklassen. 

onCreate (): Dette kalles når aktiviteten initialiseres først. Du må implementere denne metoden for å kunne gjøre noen initialisering som er spesifikk for aktiviteten din.

onStart (): Dette kalles for første gang aktiviteten er i ferd med å bli synlig for brukeren, da aktiviteten forbereder seg til å komme til forgrunnen blir interaktiv. Når denne tilbakeringingen er ferdig, blir den onResume () Metoden vil bli kalt.

onResume (): Når aktiviteten går inn i denne tilstanden, begynner den å samhandle med brukeren. Aktiviteten fortsetter i denne tilstanden til noe skjer for å ta fokus fra appen eller aktiviteten (for eksempel et innkommende anrop). Når dette skjer, vil onPause () Metoden vil bli kalt.

onPause (): Denne metoden brukes til å pause operasjoner som ikke skal skje når aktiviteten er i pausetilstand. Et anrop til denne metoden indikerer at brukeren forlater appen. For eksempel, i en musikkavspillingsapp, vil et innkommende anrop føre til at appen overgår til en pausetilstand. Dette bør dempe eller midlertidig stoppe musikk som spilles av. Når brukeren returnerer til appen, onResume () Metoden vil bli kalt.

onStop (): Denne metoden kalles når aktiviteten ikke lenger er synlig i appen. Det kan for eksempel skje når en annen aktivitet er lastet og tar hele skjermen på enheten. Når denne metoden heter, er aktiviteten sies å være i stoppet tilstand. I denne tilstanden kalles systemet enten onRestart () å bringe tilbake interaktivitet med aktivitet. Eller det kaller onDestroy () metode for å ødelegge aktiviteten.

onDestroy (): Dette kalles før aktiviteten er ødelagt. Systemet kaller denne metoden når en bruker avslutter aktiviteten, eller fordi systemet midlertidig ødelegger prosessen som inneholder aktiviteten for å spare plass. Sørg for å frigjøre ressurser som aktiviteten din har opprettet i denne metoden, ellers vil appen din ha en minnelekkasje!

onRestart (): Dette kalles når en aktivitet starter på nytt etter at den ble stoppet.

Starte en aktivitet

De fleste brukerinteraksjoner med en app fordi den aktive aktiviteten endres. Så en app overgår mellom Aktiviteter mange ganger i løpet av livet.

Det er nødvendig å koble sammen aktiviteter når en aktivitet trenger å starte en annen aktivitet. For å starte en aktivitet, bruker du heller startActivity () eller startActivityForResult (). Du må passere en hensikt i begge tilfeller.

Starte en aktivitet uten forventet resultat

startActivity () brukes hvis den nystartede aktiviteten ikke trenger å returnere et resultat.

Følgende kodestykke viser hvordan du starter en annen aktivitet ved hjelp av denne metoden:

Intent Intent = Ny Intent (dette, SecondActivity.class); startActivity (hensikt);

Du kan også utføre handlinger som å overføre data fra en aktivitet til en annen. I dette tilfellet vil din nåværende aktivitet (den kalt aktivitet) sende data til en målaktivitet. Dette er hvor Intents kommer til nytte. For å lære om bruk av Intents for å starte en aktivitet, sjekk ut min forrige artikkel.

Starte en aktivitet med et resultat

startActivityForResult () brukes til å starte en annen aktivitet og forventer å få data tilbake fra den nylig startede aktiviteten. Med andre ord, bruk dette når du vil få et resultat fra målaktiviteten tilbake til den anropende aktiviteten, f.eks. hvis målaktiviteten samler inn noen brukerinformasjon i en modal dialog.

Du mottar resultatet fra aktiviteten i onActivityResult (int requestCode, int resultCode, Intent data) metode. Resultatet blir returnert som en hensikt.

Eksempel på å starte en aktivitet

Her er et eksempel som viser hvordan du starter en aktivitet.

Først oppretter du din Hoved aktivitet med din onCreate () metode, en layoutfil og en forespørselskode.

 offentlig klasse MainActivity utvider Aktivitet // Unik forespørselskode for hver brukstilfelle privat statisk endelig int REQUEST_CODE_EXAMPLE = 0x9345; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); 

I din onCreate () metode, vil du opprette en ny forekomst av en hensikt å starte den andre aktiviteten din. 

Når du er klar til å starte aktiviteten, si som svar på en knapp, klikk, du ringer startActivityForResult (), som vil passere den nyopprettede hensikten og forespørselskoden.

 // Opprett en ny forekomst av Intent å starte SecondActivity final Intent Intent = Ny Intent (dette, SecondActivity.class); // Dette starter SecondActivity med forespørselskoden startActivityForResult (intensjon, REQUEST_CODE_EXAMPLE);

Fortsatt, i din Hoved aktivitet, du må håndtere aktivitetsresultat hendelser. Du gjør dette ved å implementere onActivityResult ()  metode. Slik får du resultatet fra den andre aktiviteten. 

Slik ser det ut:

 // onActivityResult bare bli kalt // når den andre aktiviteten tidligere begynte å bruke startActivityForResult @Override public void onActivityResult (int requestCode, int resultCode, Intent data) super.onActivityResult (requestCode, resultCode, data); // Først må vi sjekke om requestCode samsvarer med den vi brukte. hvis (requestCode == REQUEST_CODE_EXAMPLE) // ResultatKoden er angitt av SecondActivity // Etter konvensjon RESULT_OK betyr at uansett // SecondActivity ble utført vellykket hvis (resultCode == Aktivitet.RESULT_OK) // Få resultatet fra den returnerte Intent final String result = data.getStringExtra (SecondActivity.EXTRA_DATA); // Bruk dataene - vis i så fall det i en Toast. Toast.makeText (dette, "Resultat:" + resultat, Toast.LENGTH_LONG) .show ();  ellers // setResult ble ikke vellykket utført av SecondActivity // På grunn av noen feil eller strøm av kontroll. Ingen data å hente. 

Nå gå videre og opprett din SecondActivity. Det skal se ut som koden nedenfor.

 @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_detail); siste knappeknapp = (knapp) findViewById (R.id.button); // Når denne knappen er klikket, vil vi returnere en resultatknapp. SetOnClickListener (new View.OnClickListener () @Override public void onClick (View view) // Opprett et nytt Intent-objekt som container for resultatet endelige Intent data = Ny Intent (); // Legg til de nødvendige dataene som skal returneres til MainActivity data.putExtra (EXTRA_DATA, "Noen interessante data!"); // Sett resultCode som Activity.RESULT_OK til // indikere en suksess og legg til intensjonen // som inneholder vårt resultat datasettResultat (Aktivitet.RESULT_OK, data); // Med slutt () lukker vi SecondActivity til // tilbake til MainActivity finish ();); 

Avslutt en aktivitet

Før en aktivitet avsluttes, vil de tilsvarende livscyklusmetodene bli kalt.

De onPause () Metoden bør stoppe alle lyttere og brukergrensesnittoppdateringer. De onStop () Metode skal lagre programdataene. Endelig, den onDestroy () Metoden vil frigjøre ressurser som aktiviteten har tildelt. 

Når brukeren bytter tilbake til en app som er avsluttet av systemet, vil onResume () Metoden kalles. Basert på lagrede data kan den registrere hørere og utløse brukergrensesnittoppdateringer.

Aktivitetsinstans Stat

En aktivitet trenger en måte å beholde verdifulle statlige og brukerdata som den har oppnådd. Disse dataene kan hentes fra brukerinngang eller opprettet mens aktiviteten ikke var på skjermen.

En forandring av enhetsretning kan for eksempel føre til at en aktivitet ødelegges og gjenopprettes. I et slikt scenario må du sørge for å lagre all aktivitetsstatus før den blir ødelagt, og last den på nytt når den gjenopprettes. Ellers kan data som aktiviteten din har på den tiden, gå helt tapt.

For å lagre aktivitetsstatus kan du overstyre onSaveInstanceState () metode. Denne metoden er bestått a Bunt objekt som en parameter. Et bunt kan inneholde strenge, primitive datatyper eller objekter. I denne metoden legger du ganske enkelt til viktige statsdata i bunten. Denne pakken returneres til aktiviteten senere, slik at du kan gjenopprette aktivitetsstatusen.

For å pakke ut den lagrede tilstanden fra bunten og gjenopprette den, implementer du onRestoreInstanceState () metode. Denne tilbakeringingen er påkalt mellom onStart () og onResume () livscyklusmetoder.

Vi vil se nærmere på aktivitetseksempler i en fremtidig artikkel.

Konklusjon

Etter å ha fulgt dette innlegget, har du en god forståelse av hvordan en aktivitets livssyklus fungerer. Og du har lært at det er to måter å starte en aktivitet, samt å få noen poeng på hvordan forekomststat håndteres i aktivitetslivssyklusen.

Takk for at du leser, og mens du er her, sjekk ut noen av våre andre innlegg på kodende Android-apper.