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 — 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 — 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 | Účel | Akce vývojáře |
|---|---|---|
| onCreate | Voláno při vytvoření Activity | Inicializace UI, přihlášení k ViewModel |
| onStart | Activity se stává viditelnou | Spuštění animací, kamery, GPS |
| onResume | Activity získává vstupní fokus | Obnovení videa, časovačů |
| onPause | Activity ztrácí fokus | Uložení konceptů, zastavení animací |
| onStop | Activity skryta jinou obrazovkou | Uvolnění těžkých zdrojů |
| onDestroy | Activity je zničena | Vyčištění předplatných, Closeable |
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.
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.
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í.
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.
<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).
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).
// 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.
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)
}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.
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())
}
}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.
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
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ý.
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.
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.
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.
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í
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í.
Přečtěte si také