Activity — vad är det, app-skärm i Android och dess Lifecycle

Författare: IT Sectr Publicerad: 2026-02-22 Lästid: 7 min

Activity — den grundläggande komponenten i en Android-app som representerar en skärm med ett användargränssnitt. Systemet hanterar skärmar genom en strikt livscykel — callbacks onCreate, onResume och onDestroy. Varje Activity deklareras i AndroidManifest.xml och startas via Intent. Läs mer om Androids historia i Googles officiella dokumentation.

Huvudpunkter

  • Activity — Android-komponent som representerar en skärm med UI. Hanteras via Lifecycle
  • Livscykel omfattar 6 callbacks: onCreate, onStart, onResume, onPause, onStop, onDestroy
  • Intent — mekanism för att starta Activity och överföra data mellan skärmar
  • Manifest — obligatorisk registrering av varje Activity i AndroidManifest.xml
  • ViewModel — Jetpack-komponent för att bevara data när Activity återskapas

Vad är Activity?

Activity — den viktigaste komponenten i en Android-app som tillhandahåller ett fönster för interaktion med användaren. Varje Activity hanterar en separat skärm: uppgiftslista, inloggningsformulär, fotovisning. Android-systemet skapar Activity på begäran och förstör det när minnet behövs för andra appar.

Activity dök först upp i Android 1.0 (2008) och förblir den viktigaste byggstenen i gränssnittet. Enligt Google (2026) innehåller 98% av apparna i Google Play minst en Activity. I modern arkitektur rekommenderar Google en Activity med många Fragment, men den klassiska flerskärmsappen förblir en vanlig praxis.

Activity stack (back stack) — uppgiftsstacken som lagrar navigeringshistorik. När användaren trycker på „Tillbaka“ förstörs den aktuella Activity och den föregående återställs. Systemet hanterar stacken automatiskt, men utvecklaren kan kontrollera beteendet genom launchMode och Intent-flaggor.

Activitys livscykel

Livscykeln för Activity — uppsättningen tillstånd och callbacks som skärmen går igenom från skapande till förstöring. Att förstå Lifecycle är avgörande: felaktigt arbete med tillstånd leder till minnesläckor, dataförlust och appkrascher.

Android-systemet anropar callbacks i strikt ordning. Utvecklaren åsidosätter nödvändiga metoder för att initiera resurser, spara data och frigöra minne. Varje callback har ett par: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.

CallbackSyfteUtvecklarens åtgärd
onCreateAnropas när Activity skapasInitiera UI, prenumerera på ViewModel
onStartActivity blir synligtStarta animationer, kamera, GPS
onResumeActivity får inmatningsfokusÅteruppta video, timer
onPauseActivity förlorar fokusSpara utkast, stoppa animationer
onStopActivity dolt av annan skärmFrigöra tunga resurser
onDestroyActivity förstörsRensa prenumerationer, Closeable

Activitys tillstånd

Fyra tillstånd för Activity särskiljs: Running (onResume aktiv), Paused (synligt men utan fokus), Stopped (osynligt), Destroyed (förstört). Systemet kan döda Activity i tillståndet Stopped vid minnesbrist — data måste sparas i onSaveInstanceState.

Livscykelmetoder: onCreate, onStart, onResume

Låt oss undersöka tre viktiga metoder i Activitys livscykel med ett exempel i Kotlin. onCreate — startpunkt, anropas en gång. Här sker kopplingen av layout via setContentView, initiering av RecyclerView, prenumeration på LiveData. onStart — Activity blir synligt för användaren. onResume — Activity får fokus och är redo för interaktion.

kotlin
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
        recyclerView.layoutManager = LinearLayoutManager(this)
        loadItems()
    }

    override fun onStart() {
        super.onStart()
        startLocationUpdates()
    }

    override fun onResume() {
        super.onResume()
        resumeVideoPlayer()
    }
}

I exemplet initierar onCreate RecyclerView och laddar data. onStart startar geolokaliseringsuppdatering — en resurs som endast ska fungera när skärmen är synlig. onResume återupptar videon som stoppades i onPause. Sådan uppdelning förhindrar onödigt arbete i bakgrunden.

Deklarera Activity i AndroidManifest.xml

Varje Activity måste deklareras i filen AndroidManifest.xml. Utan registrering hittar systemet inte skärmen och kastar ett undantag ActivityNotFoundException. I manifestet anges klassnamn, tema, orientering, launchMode och Intent-filter.

xml
<application
    android:allowBackup="true"
    android:label="@string/app_name"
    android:theme="@style/Theme.MyApp">

    <activity
        android:name=".MainActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".DetailActivity"
        android:parentActivityName=".MainActivity" />
</application>

Flaggan exported avgör om andra appar kan starta Activity. För huvudskärmen exported=true, för interna skärmar — false. Attributet parentActivityName aktiverar standardnavigeringen „Upp“ (Up Navigation).

Starta Activity via Intent

Intent — ett objekt som beskriver en åtgärd som ska utföras. I Activity-sammanhang används Intent för att starta en annan skärm med dataöverföring. Intent kan vara explicit (pekar på en specifik klass) och implicit (pekar på en åtgärd, systemet väljer lämplig komponent).

kotlin
// Explicit Intent — starta DetailActivity med data
val intent = Intent(this, DetailActivity::class.java).apply {
    putExtra("item_id", itemId)
    putExtra("item_name", itemName)
}
startActivity(intent)

// Ta emot data i DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""

För att ta emot resultat från den startade Activity används Activity Result API, som ersatte den föråldrade startActivityForResult. Det nya API:t är typsäkert, deklarativt och fungerar med Jetpack Compose.

kotlin
private val getResult = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val data = result.data?.getStringExtra("result_key")
    }
}

fun openPicker() {
    val intent = Intent(this, PickerActivity::class.java)
    getResult.launch(intent)
}

Spara tillstånd vid återskapning

Vid skärmrotation eller konfigurationsändring återskapar Android Activity — det anropar sekventiellt onDestroy och onCreate. Utan att spara tillstånd förlorar användaren inmatade data, scrollposition och valda element. För att lösa detta problem tillhandahåller Android två mekanismer: onSaveInstanceState och ViewModel.

onSaveInstanceState sparar enkla data i Bundle före anropet av onDestroy. ViewModel från Jetpack motstår återskapning av Activity och lagrar data i minnet, vilket är effektivare för komplexa objekt och nätverksförfrågningar.

kotlin
class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // ViewModel sparar automatiskt data
        viewModel.items.observe(this) { items ->
            updateAdapter(items)
        }
    }

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
    }
}

Single Activity-arkitektur och Jetpack

Googles moderna tillvägagångssätt — Single Activity-arkitektur med en Activity och många Fragment. Appen använder en MainActivity och all navigering utförs av Navigation Component via NavHostFragment. Fördelar: centraliserad navigering, delad ViewModel per skärm, korrekt arbete med Deep Links.

Jetpack Navigation Component automatiserar arbetet med back stack, övergångsanimationer och argumentöverföring. NavHostFragment placeras i Activitys layout och navigeringsgrafen (NavGraph) beskriver alla skärmar och kopplingar mellan dem. Detta tillvägagångssätt rekommenderas av Google för nya projekt och överensstämmer med Material Design-principerna.

kotlin
class MainActivity : AppCompatActivity() {

    private val navController by lazy {
        findViewById<NavHostFragment>(R.id.nav_host_fragment)
            .navController
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Konfiguration av NavigationUI för AppBar
        setupActionBarWithNavController(navController)
    }

    override fun onSupportNavigateUp() = 
        navController.navigateUp() || super.onSupportNavigateUp()
}

Vanliga frågor

Vad är skillnaden mellan Activity och Fragment?

Activity — en fullständig app-skärm med egen livscykel. Fragment — en del av UI:n inuti Activity som överlever återskapning av Activity och är beroende av dess Lifecycle. Activity är obligatorisk, Fragment är valfri.

Hur många Activity kan finnas i en app?

Det finns inga begränsningar. Varje skärm representerar vanligtvis en separat Activity. För en enkel app räcker det med en, för flerskärmsappar — från 5 till 20. Google rekommenderar en Activity med många Fragment.

Vad är launchMode i Activity?

launchMode avgör hur Activity skapas i uppgiftsstacken. Fyra lägen: standard (en ny instans skapas), singleTop, singleTask (en instans i uppgiften) och singleInstance (isolerad uppgift). Läget ställs in i AndroidManifest.xml.

Hur överför man data mellan Activity?

Via Intent — ett objekt med extras (putExtra) där primitiver, strängar, Parcelable eller Serializable placeras. För återkoppling används Activity Result API — den moderna typsäkra ersättningen för startActivityForResult.

Vad är Configuration Change i Android?

Configuration Change — återskapning av Activity vid konfigurationsändring (skärmrotation, språkändring, tangentbord). Systemet anropar onDestroy → onCreate. För att spara data används onSaveInstanceState eller ViewModel från Jetpack.

Sammanfattning

  • Activity — den grundläggande Android-komponenten som representerar en skärm med användargränssnitt och hanteras via livscykeln
  • Livscykel består av sex callbacks: onCreate, onStart, onResume, onPause, onStop, onDestroy — var och en har ett strikt syfte
  • Intent säkerställer start av Activity och dataöverföring mellan skärmar via explicita och implicita anrop
  • AndroidManifest.xml kräver obligatorisk registrering av varje Activity med namn, tema, orientering och filter
  • ViewModel från Jetpack bevarar data vid återskapning av Activity och ersätter manuell sparning i onSaveInstanceState
  • Single Activity-arkitektur med Navigation Component — den moderna standarden som rekommenderas av Google för Android-projekt
  • launchMode hanterar Activitys beteende i uppgiftsstacken: från standard till singleInstance för isolerade skärmar

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också