I mitt tidigare inlägg lärde du dig att Intents låt oss skicka meddelanden från en Android-komponent till en annan. Tja, en väldigt viktig typ av komponent är en aktivitet.
Verksamheten är en grundläggande del av Android App-utveckling. Och det är omöjligt att förstå Aktiviteter utan att förstå deras livscykel. I det här inlägget lär du dig information om aktivitetslivscykeln.
En aktivitet är en enda skärm i Android. Det är som ett fönster i en stationär app eller en ram i ett Java-program. En aktivitet låter dig placera alla dina UI-komponenter eller widgets tillsammans på skärmen.
Det är viktigt att förstå att en aktivitet har en livscykel: det vill säga att den kan vara i en av flera olika stater beroende på vad som händer med appen och med användarens interaktion.
Låt oss titta närmare på livscykeln för en Android-aktivitet. Varje gång aktivitetsläget ändras, kommer en av följande livscykelmetoder att ringas på Aktivitetsklassen.
onCreate ()
: Detta kallas när aktiviteten initialiseras först. Du måste implementera den här metoden för att kunna göra någon initialisering som är specifik för din aktivitet.
onStart ()
: Detta kallas första gången aktiviteten håller på att bli synlig för användaren, eftersom aktiviteten förbereder sig för att komma till förgrunden bli interaktiv. När denna återuppringning avslutas, på CV()
Metoden kommer att kallas.
på CV()
: När aktiviteten går in i det här tillståndet börjar det att interagera med användaren. Aktiviteten fortsätter i detta tillstånd tills något händer att ta fokus från appen eller aktiviteten (som ett inkommande samtal). När detta händer, onPause ()
Metoden kommer att kallas.
onPause ()
: Den här metoden används för att pausa operationer som inte ska hända när aktiviteten är i pausat tillstånd. Ett samtal till den här metoden indikerar att användaren lämnar appen. I en musikspelarapp kan till exempel ett inkommande samtal få appen att gå över till ett pausat tillstånd. Detta bör stänga av eller pausa den musik som spelas för närvarande. När användaren återvänder till appen, kommer den på CV()
Metoden kommer att kallas.
onStop ()
: Den här metoden heter när aktiviteten inte längre är synlig i appen. Det kan till exempel hända när en annan aktivitet har laddats och tar hela skärmen på enheten. När den här metoden heter kallas aktiviteten i ett stoppat tillstånd. I detta tillstånd kallar systemet antingen onRestart ()
att få tillbaka interaktivitet med aktivitet. Eller det kallar onDestroy ()
metod för att förstöra aktiviteten.
onDestroy ()
: Detta kallas innan aktiviteten förstörs. Systemet kallar den här metoden när en användare avslutar aktiviteten, eller eftersom systemet tillfälligt förstör processen som innehåller aktiviteten för att spara utrymme. Var noga med att frigöra de resurser som din aktivitet har skapat med den här metoden, annars kommer din app att ha en minnesläcka!
onRestart ()
: Det här kallas när en aktivitet startas om efter att den blivit stoppad.
De flesta användarinteraktioner med en app för att den aktiva aktiviteten ska ändras. Så en app övergår mellan aktiviteter många gånger under sin livstid.
Det är nödvändigt att länka aktiviteter tillsammans när en aktivitet behöver starta en annan aktivitet. För att starta en aktivitet använder du antingen startActivity ()
eller startActivityForResult ()
. Du måste passera en avsikt i båda fallen.
startActivity ()
används om den nystartade aktiviteten inte behöver returnera ett resultat.
Följande kodsekvens visar hur du startar en annan aktivitet med den här metoden:
Intent Intent = Ny Intent (detta, SecondActivity.class); startActivity (intent);
Du kan också utföra åtgärder som att skicka data från en aktivitet till en annan. I detta fall vill din aktuella aktivitet (den uppringande aktiviteten) överföra data till en målaktivitet. Det är här Intentionerna är till nytta. Om du vill veta mer om att använda Intents för att starta en aktivitet, kolla in min tidigare artikel.
startActivityForResult ()
används för att starta en annan aktivitet och förväntar sig att få data tillbaka från den nystartade aktiviteten. Med andra ord, använd detta när du vill få ett resultat från målaktiviteten tillbaka till den anropande aktiviteten, t.ex. om målaktiviteten samlar in någon användarinformation i en modal dialog.
Du får resultatet från aktiviteten i onActivityResult (int requestCode, int resultCode, Intent data)
metod. Resultatet kommer att returneras som en avsikt.
Här är ett exempel som visar hur en aktivitet startar.
Först skapar du din Huvudaktivitet
med din onCreate ()
metod, en layoutfil och en förfrågan kod.
public class MainActivity utökar aktivitet // Unik begärankod för varje användningsområde privat statisk slutlig int REQUEST_CODE_EXAMPLE = 0x9345; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main);
I din onCreate ()
Metod, du skapar en ny instans av en avsikt att starta din andra aktivitet.
När du är redo att starta den aktiviteten, säg som ett svar på en knapp, du ringer startActivityForResult ()
, som kommer att passera den nyskapade avsikten och begärankoden.
// Skapa en ny instans av Intent att starta SecondActivity final Intent intent = ny Intent (detta, SecondActivity.class); // Detta startar SecondActivity med begärankoden startActivityForResult (avsikt, REQUEST_CODE_EXAMPLE);
Fortfarande i din Huvudaktivitet
, du måste hantera händelser med aktivitetsresultat. Du gör det genom att genomföra onActivityResult ()
metod. Så här får du resultatet från den andra aktiviteten.
Så här ska det se ut:
// onActivityResult får bara kallas // när den andra aktiviteten tidigare började använda startActivityForResult @Override public void onActivityResult (int requestCode, int resultCode, Intent data) super.onActivityResult (requestCode, resultCode, data); // Först måste vi kontrollera om requestCode matchar den vi använde. om (requestCode == REQUEST_CODE_EXAMPLE) // Resultatkoden är inställd av SecondActivity // Enligt konventionen betyder RESULT_OK att vad som helst // SecondActivity utfördes framgångsrikt om (resultCode == Aktivitet.RESULT_OK) // Hämta resultatet från den returnerade Intent Final String result = data.getStringExtra (SecondActivity.EXTRA_DATA); // Använd data - visa i så fall det i en Toast. Toast.makeText (detta, "Resultat:" + resultat, Toast.LENGTH_LONG) .show (); else // setResult utfördes inte med andraActivity // på grund av något fel eller flöde av kontroll. Ingen data att hämta.
Nu fortsätt och skapa din SecondActivity
. Det ska se ut som koden nedan.
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_detail); sista knappknappen = (knapp) findViewById (R.id.button); // När den här knappen klickas vill vi returnera en resultatknapp. SetOnClickListener (new View.OnClickListener () @Override public void onClick (View view) // Skapa ett nytt Intent-objekt som behållare för resultatet Final Intent data = new Intent (); // Lägg till de uppgifter som krävs för att returneras till MainActivity data.putExtra (EXTRA_DATA, "Några intressanta data!"); // Ange resultCode som Activity.RESULT_OK till // indikera en framgång och bifoga avsikt // som innehåller vårt resultatdatasäteResultat (Aktivitet.RESULT_OK, data); // Med avslutning () stänger vi SecondActivity till // tillbaka till MainActivity finish (););
Innan en aktivitet avslutas kommer motsvarande livscykelmetoder att ringas.
De onPause ()
Metoden bör stoppa alla lyssnare och användargränssnitt. De onStop ()
Metod bör spara applikationsdata. Slutligen, den onDestroy ()
Metoden kommer att frigöra alla resurser som aktiviteten har tilldelat.
När användaren växlar tillbaka till en app som har avslutats av systemet, kommer på CV()
Metoden heter. Baserat på sparade data kan den registrera lyssnare och utlösa användargränssnittsuppdateringar.
En aktivitet behöver ett sätt att behålla värdefulla tillstånds- och användardata som den har erhållit. Dessa data kan hämtas från användarinmatning eller skapas medan aktiviteten inte var på skärmen.
En ändring av enhetsorientering kan till exempel leda till att en aktivitet förstörs och återskapas. I ett sådant scenario måste du se till att spara alla aktivitetslägen innan den förstörs och ladda om den igen när den återskapas. Annars kan alla data som din aktivitet har vid den tiden gå helt och hållet förlorad.
För att spara aktivitetsstatus kan du åsidosätta onSaveInstanceState ()
metod. Denna metod är godkänd a Bunt
objekt som en parameter. Ett paket kan innehålla strängar, primitiva datatyper eller objekt. I denna metod lägger du bara till några viktiga statsdata i buntet. Denna bunt kommer tillbaka till aktiviteten senare så att du kan återställa aktivitetsstatus.
För att extrahera det sparade tillståndet från buntet och återställa det, implementera onRestoreInstanceState ()
metod. Denna återkallelse är åberopad mellan onStart ()
och den på CV()
livscykelmetoder.
Vi kommer att se djupare ut i aktivitetsexemplet i en framtida artikel.
Efter att du har följt det här inlägget har du en bra förståelse för hur en livscykel fungerar. Och du har lärt dig att det finns två sätt att starta en aktivitet, liksom att få några tips om hur exempeltillstånd hanteras i aktivitetslivscykeln.
Tack för att du läste, och medan du är här, kolla in några av våra andra inlägg på kodande Android-appar.