Activity — co to je, obrazovka aplikace v Androidu a její Lifecycle

Autor: IT Sectr Publikováno: 2026-02-22 Doba čtení: 7 min

Activity — základní komponent Android aplikace, představující jednu obrazovku s uživatelským rozhraním. Systém spravuje obrazovky přes přísný životní cyklus — callbacky onCreate, onResume a onDestroy. Každá Activity je deklarována v AndroidManifest.xml a spouští se přes Intent. Více o historii Androidu si přečtěte v oficiální dokumentaci Google.

Hlavní body

  • Activity — komponent Androidu představující jednu obrazovku s UI. Spravováno přes Lifecycle
  • Životní cyklus zahrnuje 6 callbacků: onCreate, onStart, onResume, onPause, onStop, onDestroy
  • Intent — mechanismus spouštění Activity a přenosu dat mezi obrazovkami
  • Manifest — povinná registrace každé Activity v AndroidManifest.xml
  • ViewModel — komponent Jetpack pro uchování dat při opětovném vytvoření Activity

Co je Activity?

Activity — klíčový komponent Android aplikace, poskytující okno pro interakci s uživatelem. Každá Activity spravuje samostatnou obrazovku: seznam úkolů, přihlašovací formulář, prohlížení fotky. Systém Android vytváří Activity na vyžádání a ničí ji, když je paměť potřebná pro jiné aplikace.

Activity se poprvé objevilo v Android 1.0 (2008) a zůstává hlavním stavebním blokem rozhraní. Podle Google (2026) 98% aplikací v Google Play obsahuje alespoň jednu Activity. V moderní architektuře Google doporučuje jednu Activity s mnoha Fragmenty, ale klasická vícesnímková aplikace zůstává běžnou praxí.

Activity stack (back stack) — zásobník úloh, který ukládá historii navigace. Když uživatel stiskne „Zpět“, aktuální Activity je zničena a předchozí je obnovena. Systém spravuje zásobník automaticky, ale vývojář může řídit chování pomocí launchMode a příznaků Intent.

Životní cyklus Activity

Životní cyklus Activity — sada stavů a callbacků, kterými obrazovka prochází od vytvoření po zničení. Porozumění Lifecycle je kritické: nesprávná práce se stavy vede k únikům paměti, ztrátě dat a pádům aplikace.

Systém Android volá callbacky v přísném pořadí. Vývojář přepisuje potřebné metody k inicializaci zdrojů, ukládání dat a uvolňování paměti. Každý callback má pár: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.

CallbackÚčelAkce vývojáře
onCreateVoláno při vytvoření ActivityInicializace UI, přihlášení k ViewModel
onStartActivity se stává viditelnouSpuštění animací, kamery, GPS
onResumeActivity získává vstupní fokusObnovení videa, časovačů
onPauseActivity ztrácí fokusUložení konceptů, zastavení animací
onStopActivity skryta jinou obrazovkouUvolnění těžkých zdrojů
onDestroyActivity je zničenaVyčištění předplatných, Closeable

Stavy Activity

Rozlišují se čtyři stavy Activity: Running (onResume aktivní), Paused (viditelná, ale bez fokusu), Stopped (neviditelná), Destroyed (zničena). Systém může zabít Activity ve stavu Stopped při nedostatku paměti — data musí být uložena v onSaveInstanceState.

Metody životního cyklu: onCreate, onStart, onResume

Podívejme se na tři klíčové metody životního cyklu Activity s příkladem v Kotlinu. onCreate — vstupní bod, volán jednou. Zde dochází k propojení layoutu přes setContentView, inicializaci RecyclerView, přihlášení k LiveData. onStart — Activity se stává viditelnou pro uživatele. onResume — Activity získává fokus a je připravena k interakci.

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()
    }
}

V příkladu onCreate inicializuje RecyclerView a načítá data. onStart spouští aktualizaci geolokace — zdroj, který by měl fungovat pouze když je obrazovka viditelná. onResume obnovuje video zastavené v onPause. Takové rozdělení zabraňuje zbytečné práci na pozadí.

Deklarace Activity v AndroidManifest.xml

Každá Activity musí být deklarována v souboru AndroidManifest.xml. Bez registrace systém nenajde obrazovku a vyvolá výjimku ActivityNotFoundException. V manifestu se uvádí název třídy, téma, orientace, launchMode a filtry Intent.

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>

Příznak exported určuje, zda mohou jiné aplikace spouštět Activity. Pro hlavní obrazovku exported=true, pro interní obrazovky — false. Atribut parentActivityName zapíná standardní navigaci „Nahoru“ (Up Navigation).

Spuštění Activity přes Intent

Intent — objekt popisující akci k provedení. V kontextu Activity se Intent používá ke spuštění jiné obrazovky s přenosem dat. Intent může být explicitní (ukazuje na konkrétní třídu) a implicitní (ukazuje na akci, systém vybere vhodný komponent).

kotlin
// Explicitní Intent — spuštění DetailActivity s daty
val intent = Intent(this, DetailActivity::class.java).apply {
    putExtra("item_id", itemId)
    putExtra("item_name", itemName)
}
startActivity(intent)

// Příjem dat v DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""

Pro příjem výsledku ze spuštěné Activity se používá Activity Result API, které nahradilo zastaralé startActivityForResult. Nové API je typově bezpečné, deklarativní a funguje s 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)
}

Uložení stavu při opětovném vytvoření

Při otočení obrazovky nebo změně konfigurace Android znovu vytváří Activity — sekvenčně volá onDestroy a onCreate. Bez uložení stavu uživatel ztrácí zadaná data, pozici posouvání a vybrané prvky. K vyřešení tohoto problému Android poskytuje dva mechanismy: onSaveInstanceState a ViewModel.

onSaveInstanceState ukládá jednoduchá data do Bundle před voláním onDestroy. ViewModel z Jetpacku odolává opětovnému vytvoření Activity a uchovává data v paměti, což je efektivnější pro složité objekty a síťové požadavky.

kotlin
class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()

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

        // ViewModel automaticky ukládá data
        viewModel.items.observe(this) { items ->
            updateAdapter(items)
        }
    }

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

Architektura Single Activity a Jetpack

Moderní přístup Google — architektura Single Activity s jednou Activity a mnoha Fragmenty. Aplikace používá jednu MainActivity a celou navigaci provádí Navigation Component přes NavHostFragment. Výhody: centralizovaná navigace, sdílený ViewModel na obrazovku, správná práce s Deep Links.

Jetpack Navigation Component automatizuje práci s back stack, přechodové animace a předávání argumentů. NavHostFragment je umístěn v layoutu Activity a navigační graf (NavGraph) popisuje všechny obrazovky a spojení mezi nimi. Tento přístup je doporučován Googlem pro nové projekty a je v souladu s principy Material Design.

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)

        // Konfigurace NavigationUI pro AppBar
        setupActionBarWithNavController(navController)
    }

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

Často kladené otázky

Čím se liší Activity od Fragmentu?

Activity — plnohodnotná obrazovka aplikace s vlastním životním cyklem. Fragment — část UI uvnitř Activity, která přežije opětovné vytvoření Activity a závisí na jeho Lifecycle. Activity je povinná, Fragment volitelný.

Kolik Activity může být v jedné aplikaci?

Neexistují omezení. Každá obrazovka obvykle představuje samostatnou Activity. Pro jednoduchou aplikaci stačí jedna, pro vícesnímkové — od 5 do 20. Google doporučuje jednu Activity s mnoha Fragmenty.

Co je launchMode v Activity?

launchMode určuje, jak je Activity vytvořena v zásobníku úloh. Čtyři režimy: standard (vytváří se nová instance), singleTop, singleTask (jedna instance v úloze) a singleInstance (izolovaná úloha). Režim se nastavuje v AndroidManifest.xml.

Jak předat data mezi Activity?

Přes Intent — objekt s extra daty (putExtra), do kterých se vkládají primitivy, řetězce, Parcelable nebo Serializable. Pro zpětnou vazbu se používá Activity Result API — moderní typově bezpečná náhrada startActivityForResult.

Co je Configuration Change v Androidu?

Configuration Change — opětovné vytvoření Activity při změně konfigurace (otočení obrazovky, změna jazyka, klávesnice). Systém volá onDestroy → onCreate. Pro ukládání dat se používá onSaveInstanceState nebo ViewModel z Jetpacku.

Shrnutí

  • Activity — základní komponent Androidu představující jednu obrazovku s uživatelským rozhraním a spravovaný přes životní cyklus
  • Životní cyklus se skládá ze šesti callbacků: onCreate, onStart, onResume, onPause, onStop, onDestroy — každý má přísný účel
  • Intent zajišťuje spouštění Activity a přenos dat mezi obrazovkami přes explicitní a implicitní volání
  • AndroidManifest.xml vyžaduje povinnou registraci každé Activity s názvem, tématem, orientací a filtry
  • ViewModel z Jetpacku uchovává data při opětovném vytvoření Activity a nahrazuje ruční ukládání v onSaveInstanceState
  • Architektura Single Activity s Navigation Component — moderní standard doporučený Googlem pro Android projekty
  • launchMode řídí chování Activity v zásobníku úloh: od standardního po singleInstance pro izolované obrazovky

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také