Activity — de basiscomponent van een Android-app, die één scherm met een gebruikersinterface vertegenwoordigt. Het systeem beheert schermen via een strikte levenscyclus — callbacks onCreate, onResume en onDestroy. Elke Activity wordt gedeclareerd in AndroidManifest.xml en gestart via Intent. Lees meer over de geschiedenis van Android in de officiële Google-documentatie.
Belangrijkste punten
Activity — de belangrijkste component van een Android-app, die een venster biedt voor interactie met de gebruiker. Elke Activity beheert een apart scherm: takenlijst, inlogformulier, fotoweergave. Het Android-systeem maakt Activity op verzoek aan en vernietigt het wanneer het geheugen nodig is voor andere apps.
Activity verscheen voor het eerst in Android 1.0 (2008) en blijft de belangrijkste bouwsteen van de interface. Volgens Google (2026) bevat 98% van de apps in Google Play ten minste één Activity. In de moderne architectuur raadt Google één Activity met meerdere Fragmenten aan, maar de klassieke meerschermen-app blijft een gangbare praktijk.
Activity stack (back stack) — de takenstack die de navigatiegeschiedenis opslaat. Wanneer de gebruiker op „Terug“ drukt, wordt de huidige Activity vernietigd en de vorige hersteld. Het systeem beheert de stack automatisch, maar de ontwikkelaar kan het gedrag controleren via launchMode en Intent-vlaggen.
De levenscyclus van Activity — de set toestanden en callbacks die het scherm doorloopt van aanmaak tot vernietiging. Begrip van Lifecycle is cruciaal: verkeerd werken met toestanden leidt tot geheugenlekken, gegevensverlies en crashes van de app.
Het Android-systeem roept callbacks in een strikte volgorde aan. De ontwikkelaar overschrijft de benodigde methoden om bronnen te initialiseren, gegevens op te slaan en geheugen vrij te maken. Elke callback heeft een paar: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.
| Callback | Doel | Actie ontwikkelaar |
|---|---|---|
| onCreate | Aangeroepen bij aanmaken Activity | Initialisatie UI, abonneren op ViewModel |
| onStart | Activity wordt zichtbaar | Starten animaties, camera, GPS |
| onResume | Activity krijgt invoerfocus | Hervatten video, timers |
| onPause | Activity verliest focus | Opslaan concepten, stoppen animaties |
| onStop | Activity verborgen door ander scherm | Vrijgeven zware bronnen |
| onDestroy | Activity wordt vernietigd | Opschonen abonnementen, Closeable |
Er worden vier toestanden van Activity onderscheiden: Running (onResume actief), Paused (zichtbaar maar zonder focus), Stopped (onzichtbaar), Destroyed (vernietigd). Het systeem kan Activity in de toestand Stopped doden bij geheugengebrek — gegevens moeten worden opgeslagen in onSaveInstanceState.
Laten we drie belangrijke methoden van de levenscyclus van Activity bekijken met een voorbeeld in Kotlin. onCreate — het startpunt, eenmalig aangeroepen. Hier vindt het koppelen van de layout via setContentView plaats, initialisatie van RecyclerView, abonneren op LiveData. onStart — Activity wordt zichtbaar voor de gebruiker. onResume — Activity krijgt focus en is klaar voor interactie.
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()
}
}In het voorbeeld initialiseert onCreate RecyclerView en laadt gegevens. onStart start de geolocatie-update — een bron die alleen moet werken wanneer het scherm zichtbaar is. onResume hervat de video die in onPause is gestopt. Deze scheiding voorkomt onnodig werk op de achtergrond.
Elke Activity moet worden gedeclareerd in het bestand AndroidManifest.xml. Zonder registratie vindt het systeem het scherm niet en gooit het een ActivityNotFoundException. In het manifest worden de klassenaam, thema, oriëntatie, launchMode en Intent-filters opgegeven.
<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>De vlag exported bepaalt of andere apps de Activity kunnen starten. Voor het hoofdscherm exported=true, voor interne schermen — false. Het attribuut parentActivityName activeert de standaard „Omhoog“-navigatie (Up Navigation).
Intent — een object dat een actie beschrijft die moet worden uitgevoerd. In de context van Activity wordt Intent gebruikt om een ander scherm te starten met gegevensoverdracht. Intent kan expliciet zijn (verwijst naar een specifieke klasse) en impliciet (verwijst naar een actie, het systeem kiest de juiste component).
// Expliciete Intent — DetailActivity starten met gegevens
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// Gegevens ontvangen in DetailActivity
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""Om een resultaat te ontvangen van de gestarte Activity wordt Activity Result API gebruikt, die de verouderde startActivityForResult heeft vervangen. De nieuwe API is typeveilig, declaratief en werkt met 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)
}Bij schermrotatie of configuratiewijziging maakt Android Activity opnieuw aan — het roept achtereenvolgens onDestroy en onCreate aan. Zonder statusopslag verliest de gebruiker ingevoerde gegevens, scrollpositie en geselecteerde elementen. Om dit probleem op te lossen biedt Android twee mechanismen: onSaveInstanceState en ViewModel.
onSaveInstanceState slaat eenvoudige gegevens op in Bundle vóór het aanroepen van onDestroy. ViewModel van Jetpack doorstaat het opnieuw aanmaken van Activity en bewaart gegevens in het geheugen, wat efficiënter is voor complexe objecten en netwerkverzoeken.
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel slaat automatisch gegevens op
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}De moderne benadering van Google — Single Activity-architectuur met één Activity en meerdere Fragmenten. De app gebruikt één MainActivity en de volledige navigatie wordt uitgevoerd door Navigation Component via NavHostFragment. Voordelen: gecentraliseerde navigatie, gedeelde ViewModel per scherm, correcte werking met Deep Links.
Jetpack Navigation Component automatiseert het werken met back stack, overgangsanimaties en argumentoverdracht. NavHostFragment wordt in de layout van Activity geplaatst en de navigatiegraaf (NavGraph) beschrijft alle schermen en verbindingen ertussen. Deze benadering wordt door Google aanbevolen voor nieuwe projecten en is in overeenstemming met de principes van 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)
// Configuratie van NavigationUI voor AppBar
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}Veelgestelde vragen
Activity — een volledig app-scherm met een eigen levenscyclus. Fragment — een deel van de UI binnen Activity, dat het opnieuw aanmaken van Activity overleeft en afhankelijk is van zijn Lifecycle. Activity is verplicht, Fragment optioneel.
Er zijn geen beperkingen. Elk scherm vertegenwoordigt meestal een aparte Activity. Voor een eenvoudige app is één voldoende, voor meerschermen-apps — van 5 tot 20. Google raadt één Activity met meerdere Fragmenten aan.
launchMode bepaalt hoe Activity wordt aangemaakt in de takenstack. Vier modi: standard (nieuwe instantie wordt aangemaakt), singleTop, singleTask (één instantie in de taak) en singleInstance (geïsoleerde taak). De modus wordt ingesteld in AndroidManifest.xml.
Via Intent — een object met extras (putExtra) waarin primitieven, strings, Parcelable of Serializable worden geplaatst. Voor terugkoppeling wordt Activity Result API gebruikt — de moderne typeveilige vervanging van startActivityForResult.
Configuration Change — het opnieuw aanmaken van Activity bij configuratiewijziging (schermrotatie, taalwijziging, toetsenbord). Het systeem roept onDestroy → onCreate aan. Voor het opslaan van gegevens wordt onSaveInstanceState of ViewModel van Jetpack gebruikt.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook