onResume — Grundlagen, Benutzerinteraktion in Android

Autor: IT Sectr Veröffentlicht: 2026-03-04 Lesezeit: 10 Min.

onResume ist eine Lebenszyklusmethode in Android, die aufgerufen wird, wenn eine Activity oder Fragment in den Vordergrund kommt und den Eingabefokus erhält. In diesem Zustand ist der Bildschirm bereit für die Benutzerinteraktion: alle Berührungsereignisse, Tastendrücke und Gesten werden an diese Komponente weitergeleitet. onResume ist der Arbeitszustand einer Activity, in dem die App die meiste Zeit verbringt. Hier öffnet man die Kamera, startet die Videowiedergabe, beginnt die Spracherkennung und registriert Sensor-Listener, die exklusiven Zugriff benötigen. Weitere Informationen zum vollständigen Activity-Lebenszyklus finden Sie im Artikel Activity Lifecycle.

Wichtige Punkte

  • onResume — Activity im Vordergrund mit Eingabefokus; wird nach onStart oder nach der Rückkehr aus einem Dialog aufgerufen
  • Exklusive Ressourcen — Kamera, Mikrofon, Videoaufnahme werden in onResume geöffnet und in onPause geschlossen
  • Paar onResume/onPause — Ressourcen, die vollständigen Fokus benötigen, werden durch dieses Paar verwaltet; in onResume registriert, in onPause freigegeben
  • onResume vs onStart — onStart = Sichtbarkeit, onResume = Interaktion; ein Dialog überschreibt onResume, aber nicht onStart
  • Timing — onResume sollte schnell sein; lange Operationen hier verzögern die UI-Reaktionsfähigkeit
  • Fragment.onResume — wird nach Activity.onResume aufgerufen, wenn das Fragment zur Interaktion bereit ist
  • onResume in Jetpack — lifecycleScope und LiveData verwenden onResume für die automatische Abonnementverwaltung

Grundlagen der onResume-Methode in Android

onResume — die dritte Lebenszyklusmethode einer Activity, die nach onStart aufgerufen wird und signalisiert, dass der Bildschirm für die vollständige Benutzerinteraktion bereit ist. In diesem Moment befindet sich die Activity oben im Task-Stapel (Back Stack), das System leitet alle Eingabeereignisse an sie weiter, und die App kann alle Vorgänge starten, die eine aktive Benutzerbeteiligung erfordern: Videoanrufe, Spiele, Audioaufnahme, Zeichnen auf Canvas.

onResume ist Teil der „Vordergrund-Lebensdauer“ (foreground lifetime) — des Zeitraums zwischen onResume und onPause. Dies ist die aktivste Periode einer Activity, in der die App die meisten Ressourcen verbraucht: CPU für die Touch-Verarbeitung, GPU für das Rendern von Animationen, Kamera und Mikrofon für die Videoaufnahme. Das Verständnis dieser Lebenszyklusebene ist entscheidend für die Optimierung des Energieverbrauchs — in onResume geöffnete Ressourcen müssen in onPause sofort geschlossen werden.

Laut Google I/O 2025 beträgt die durchschnittliche Zeit, die eine Activity pro Sitzung im onResume-Zustand verbringt, 2–5 Minuten für Nachrichten-Apps und 15–30 Minuten für Spiele und Messenger. Die gesamte restliche Zeit befindet sich die Activity in den Zuständen onPause, onStop oder onDestroy. Das bedeutet, dass die Optimierung speziell des onResume-Codes die größten Gewinne bei Leistung und Akkulaufzeit bringt.

onResume in Activity

In einer Activity wird die onResume-Methode jedes Mal aufgerufen, wenn der Bildschirm den Eingabefokus erhält — beim ersten Start, bei der Rückkehr von einer anderen Activity, beim Schließen eines Dialogs, beim Entsperren des Geräts. Dies ist eine „heiße“ Methode, die mehrmals pro Sitzung aufgerufen werden kann, und ihre Implementierung sollte so leichtgewichtig wie möglich sein.

kotlin
class CameraActivity : AppCompatActivity() {
    private var cameraProvider: ProcessCameraProvider? = null
    private var preview: Preview? = null

    override fun onResume() {
        super.onResume()
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        cameraProviderFuture.addListener({
            cameraProvider = cameraProviderFuture.get()
            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
            preview = Preview.Builder().build().also {
                it.setSurfaceProvider(binding?.viewFinder?.surfaceProvider)
            }
            try {
                cameraProvider?.unbindAll()
                cameraProvider?.bindToLifecycle(
                    this, cameraSelector, preview
                )
            } catch (e: Exception) {
                Log.e("Camera", "Failed to bind camera", e)
            }
        }, ContextCompact.getMainExecutor(this))
    }

    override fun onPause() {
        super.onPause()
        cameraProvider?.unbindAll()
        preview = null
    }
}

Das CameraX-Beispiel zeigt die klassische Verwendung von onResume/onPause: Die Kamera ist eine exklusive Ressource, die jeweils nur von einer App verwendet werden kann. Die Bindung der Kamera an den Lebenszyklus über bindToLifecycle schließt die Kamera automatisch in onPause, aber ein expliziter unbindAll-Aufruf garantiert die sofortige Freigabe. Dies ist besonders wichtig beim Wechsel zwischen Activities: Die Kamera muss freigegeben werden, bevor eine andere Activity versucht, sie zu öffnen.

onResume in Fragment

onResume in einem Fragment wird aufgerufen, nachdem die enthaltende Activity onResume erhalten hat. Aufgrund der Besonderheiten von FragmentManager und ViewPager kann der Zeitpunkt des onResume-Aufrufs für ein Fragment jedoch relativ zur Activity verzögert sein. Beispielsweise erhält ein Fragment in einem ViewPager mit offscreenPageLimit = 1 onResume nur, wenn es zur aktuellen Seite wird, nicht beim Start der Activity.

kotlin
class VideoPlayerFragment : Fragment() {
    private var exoPlayer: ExoPlayer? = null

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        exoPlayer = ExoPlayer.Builder(requireContext()).build()
        binding?.playerView?.player = exoPlayer
    }

    override fun onResume() {
        super.onResume()
        exoPlayer?.play()
        if (userVisibleHint) {
            startBiometricAuth()
        }
    }

    override fun onPause() {
        exoPlayer?.pause()
        stopBiometricAuth()
        super.onPause()
    }
}

Die userVisibleHint-Prüfung in Fragment.onResume ist für ViewPager relevant: Ein Fragment kann onResume erhalten, aber von einer benachbarten Seite verborgen sein (z. B. während eines animierten Übergangs). In solchen Fällen führt das Starten von Video oder Biometrie in onResume ohne Sichtbarkeitsprüfung zu unerwartetem Verhalten. Ab Fragment 1.5.0 wird empfohlen, FragmentTransaction.setMaxLifecycle() für die präzise Steuerung des Fragment-Lebenszyklus in ViewPager2 zu verwenden.

onResume vs onStart: Wann verwendet man was

Entwickler verwechseln oft onStart und onResume und platzieren Code in der falschen Methode. Die Hauptregel: onStart — für Ressourcen, die während der Sichtbarkeit arbeiten; onResume — für Ressourcen, die Eingabefokus benötigen. Schauen wir uns konkrete Szenarien und die richtige Methodenwahl an.

OperationMethodeBegründung
Geolokalisierungs-AbonnementonStart / onStopGPS kann bei teilweiser Sichtbarkeit arbeiten
Kamera öffnenonResume / onPauseKamera ist eine exklusive Ressource
BroadcastReceiveronStart / onStopSystemereignisse benötigen keinen Fokus
VideowiedergabeonResume / onPauseVideo muss für den Benutzer sichtbar sein
Bluetooth-ScanningonStart / onStopScanning kann im Hintergrund laufen
Diktiergerät (MediaRecorder)onResume / onPauseAufnahme erfordert aktive UI
Sensor-ListeneronResume / onPauseSensoren für Spiele und Gesten
DatenaktualisierungonStartAktuelle Daten beim Erscheinen benötigt

Eine praktische Regel: Wenn ein Vorgang beim Erscheinen eines Dialogs unterbrochen werden soll — verwenden Sie onResume/onPause. Wenn ein Vorgang bei teilweiser Bildschirmabdeckung fortgesetzt werden kann — verwenden Sie onStart/onStop. Beispielsweise sollte ein Videoplayer das Video beim Öffnen eines Dialogs pausieren (onPause), während die Geolokalisierung weiter aktualisieren kann (bleibt in onStart).

Verwaltung exklusiver Ressourcen

Exklusive Ressourcen sind Gerätekomponenten, die zu einem bestimmten Zeitpunkt nur von einer App verwendet werden können. Kamera, Mikrofon, Videoausgang (MediaProjection), NFC-Adapter im Lesemodus, USB-Geräte im Accessoire-Modus — alle diese Ressourcen müssen in onResume geöffnet und in onPause freigegeben werden.

Arbeiten mit MediaRecorder

MediaRecorder wird zum Aufzeichnen von Audio und Video verwendet. Berechtigungsanfragen und die Vorbereitung von MediaRecorder erfolgen in onCreate, während die Aufnahme in onResume beginnt. Wenn der Benutzer zu einer anderen App wechselt, pausiert onPause die Aufnahme und onResume setzt sie fort. Dies ist das Standardverhalten für Diktiergeräte und Videoaufnahme-Apps.

kotlin
private var mediaRecorder: MediaRecorder? = null
private var isRecording = false

override fun onResume() {
    super.onResume()
    if (isRecording) {
        mediaRecorder?.resume()
    }
}

override fun onPause() {
    if (isRecording) {
        mediaRecorder?.pause()
    }
    super.onPause()
}

BiometricPrompt und onResume

Die biometrische Authentifizierung (BiometricPrompt) sollte nur aufgerufen werden, wenn die Activity in onResume ist. Wenn sie in onCreate oder onStart aufgerufen wird, kann der Biometriedialog erscheinen, bevor die Activity die Initialisierung abgeschlossen hat, was zu einer falschen Ergebnisverarbeitung führt. Der Aufruf in onResume stellt sicher, dass das Biometriefenster im richtigen Kontext angezeigt wird.

Muster und Empfehlungen

Betrachten wir drei bewährte Muster für die Arbeit mit onResume, die in kommerziellen Projekten verwendet werden: Zurücksetzen des Inaktivitätstimers, Aktualisierung sichtbarer Daten und Integration mit Jetpack Navigation.

Zurücksetzen des Inaktivitätstimers

In Apps mit sensiblen Daten (Banking, Krankenakten) wird onResume verwendet, um den automatischen Logout-Timer zurückzusetzen. Wenn der Benutzer aktiv mit der App interagiert, wird onResume bei jedem Bildschirmwechsel aufgerufen und der Timer zurückgesetzt. Wenn der Benutzer die App minimiert, stoppt onPause den Timer, und onResume setzt ihn bei der Rückkehr entweder zurück oder fordert eine erneute Authentifizierung an.

Datenaktualisierung bei Rückkehr

Eine Liste, die bei jedem erneuten Aufrufen des Bildschirms aktuelle Daten anzeigen muss, wird in onResume aktualisiert. Wenn der Benutzer beispielsweise in einer anderen Activity einen neuen Eintrag erstellt hat und zurück navigiert, lädt onResume die Liste aus der lokalen Datenbank oder dem ViewModel-Cache neu. Dies gewährleistet Datenkonsistenz ohne manuellen notifyDataSetChanged-Aufruf.

kotlin
override fun onResume() {
    super.onResume()
    // ActivityResultLauncher hat ein Ergebnis zurückgegeben — Liste wird aktualisiert
    viewModel.refreshList()
    // Inaktivitätstimer zurücksetzen
    inactivityTimer.reset()
}

Jetpack Navigation und onResume

In Jetpack Navigation wird onResume eines Fragments jedes Mal aufgerufen, wenn Sie über die Rückwärtsnavigation zu ihm zurückkehren. Diese Eigenschaft wird verwendet, um den UI-Zustand zurückzusetzen: Tastatur ausblenden, Suchfelder leeren, Toolbar-Titel aktualisieren. OnBackPressedCallback in Kombination mit onResume gibt volle Kontrolle über die Navigation ohne Code-Duplizierung.

Häufig gestellte Fragen

Was ist der Unterschied zwischen onResume und onStart in einfachen Worten?

onStart — der Bildschirm ist sichtbar. onResume — der Bildschirm ist aktiv und bereit zur Interaktion. Stellen Sie sich vor: Sie sehen fern (onStart), aber Sie nehmen die Fernbedienung in die Hand (onResume). Der Fernseher ist immer sichtbar, aber die Interaktion beginnt erst mit der Fernbedienung. Wenn jemand den Fernseher mit einem Vorhang abdeckt — ist der Bildschirm nicht mehr sichtbar (onStop). Wenn Ihnen jemand die Fernbedienung wegnimmt — hört die Interaktion auf (onPause), aber der Fernseher ist noch sichtbar.

Wie oft wird onResume aufgerufen?

onResume wird jedes Mal aufgerufen, wenn die Activity den Eingabefokus erhält. Das Minimum ist einmal (beim Start). Das Maximum hängt von den Nutzungsszenarien ab: Wechseln zwischen Bildschirmen, Öffnen von Dialogen, schnelles Sperren und Entsperren des Geräts — jedes solche Szenario ruft onResume bei der Rückkehr zum Bildschirm auf.

Warum ist onResume der beste Ort, um die Kamera zu öffnen?

Die Kamera ist eine exklusive Ressource, die jeweils nur einer App zur Verfügung steht. Wenn Sie die Kamera in onCreate oder onStart öffnen, bleibt sie für andere Apps gesperrt, selbst wenn Ihre App inaktiv ist. onResume garantiert, dass die Kamera nur geöffnet ist, wenn die Activity im Vordergrund ist, und onPause schließt sie sofort. Dies ist ein Android-Entwicklungsstandard, der in der Dokumentation von CameraX und Camera2 API festgelegt ist.

Kann onResume nach onStart ausbleiben?

Ja, onResume kann ausbleiben, wenn eine Activity unmittelbar nach dem Erscheinen von einer anderen Activity überlagert wird. Beispielsweise startet Activity A Activity B in der onCreate- oder onStart-Methode. In diesem Fall erhält A onStart → onPause → onStop und überspringt onResume. Das System ruft onResume nicht auf, weil Activity A nie den Eingabefokus erhalten hat.

Was sollte man in onResume nicht tun?

In onResume sollten keine langen synchronen Operationen ausgeführt werden: Laden großer Datenmengen aus dem Netzwerk, komplexe SQL-Abfragen, Bildverarbeitung. onResume läuft im UI-Thread, und jede Blockierung länger als 100–200 ms führt zu einer Verzögerung der UI-Reaktionsfähigkeit. Alle schweren Operationen sollten asynchron sein — über Coroutinen, RxJava oder WorkManager. Es wird auch nicht empfohlen, finish() in onResume ohne Prüfung aufzurufen — dies kann zu einer Endlosschleife der Neuerstellung führen.

Zusammenfassung

  • onResume — Vordergrundzustand mit Eingabefokus; Activity bereit für Benutzerinteraktion
  • Exklusive Ressourcen — Kamera, Mikrofon, Videoaufnahme werden in onResume geöffnet und in onPause geschlossen
  • onResume vs onStart — onStart für sichtbare, onResume für aktive Ressourcen; ein Dialog unterbricht onResume, aber nicht onStart
  • Leistung — onResume sollte leichtgewichtig sein; alle schweren Operationen asynchron
  • Fragment.onResume — hängt von der Sichtbarkeit in ViewPager ab; userVisibleHint prüfen oder setMaxLifecycle verwenden
  • Typische Aufgaben — Timer-Zurücksetzen, Datenaktualisierung bei Rückkehr, BiometricPrompt-Verwaltung
  • Paar onResume/onPause — Ressourcen mit exklusivem Zugriff werden ausschließlich durch dieses Paar verwaltet

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch