onResume — alapok, felhasználói interakció Androidban

Szerző: IT Sectr Megjelenés: 2026-03-04 Olvasási idő: 10 perc

onResume — az Android életciklus metódusa, amely akkor hívódik meg, amikor az Activity vagy Fragment az előtérbe kerül és bemeneti fókuszt kap. Ebben állapotban a képernyő készen áll a felhasználói interakcióra: minden érintési esemény, billentyűlenyomás és gesztus ehhez a komponenshez irányul. Az onResume az Activity működő állapota, amelyben az alkalmazás az idő nagy részét tölti. Itt nyitják meg a kamerát, indítják el a videolejátszást, kezdik meg a beszédfelismerést és regisztrálják a szenzorfelügyelőket, amelyek kizárólagos hozzáférést igényelnek. Az Activity teljes életciklusáról bővebben a Activity Lifecycle cikkben olvashat.

Főbb pontok

  • onResume — Activity az előtérben bemeneti fókusszal; az onStart után vagy párbeszédablakból való visszatéréskor hívódik meg
  • Kizárólagos erőforrások — kamera, mikrofon, videórögzítés az onResume-ben nyílik és az onPause-ben zárul
  • onResume/onPause pár — a teljes fókuszt igénylő erőforrásokat ez a pár kezeli; regisztráció onResume-ben, felszabadítás onPause-ben
  • onResume vs onStart — onStart = láthatóság, onResume = interakció; a párbeszédablak elfedi az onResume-t, de az onStart-ot nem
  • Időzítés — az onResume-nak gyorsnak kell lennie; hosszú műveletek itt késleltetik a felület válaszidejét
  • Fragment.onResume — az Activity.onResume után hívódik meg, amikor a Fragment készen áll az interakcióra
  • onResume Jetpackben — a lifecycleScope és LiveData az onResume-t használja az előfizetések automatikus kezeléséhez

Az onResume metódus alapjai Androidban

Az onResume — az Activity életciklus harmadik metódusa, amely az onStart után hívódik meg, jelezve a képernyő teljes felhasználói interakcióra való felkészültségét. Ebben a pillanatban az Activity a feladatverem (back stack) tetején található, a rendszer az összes bemeneti eseményt hozzá irányítja, és az alkalmazás bármilyen, aktív felhasználói részvételt igénylő műveletet megkezdhet: videohívások, játékok, hangfelvétel, rajzolás Canvas-ra.

Az onResume az előtérbeli élettartam (foreground lifetime) része — az onResume és onPause közötti időszak. Ez az Activity legaktívabb munkavégzési időszaka, amikor az alkalmazás maximális erőforrásokat fogyaszt: a processzort az érintések feldolgozásához, a GPU-t az animációk megjelenítéséhez, a kamerát és a mikrofont a videórögzítéshez. Az életciklus ezen szintjének megértése kritikus fontosságú az energiafogyasztás optimalizálásához — az onResume-ben megnyitott erőforrásokat azonnal be kell zárni az onPause-ben.

A Google I/O 2025 adatai szerint az Activity által egy munkamenet során onResume állapotban töltött átlagos idő 2–5 perc a híralkalmazásoknál és 15–30 perc a játékoknál és üzenetküldőknél. Az idő többi részében az Activity onPause, onStop vagy onDestroy állapotban van. Ez azt jelenti, hogy éppen az onResume kód optimalizálása adja a legnagyobb teljesítmény- és akkumulátor-élettartam-növekedést.

onResume Activity-ben

Activity-ben az onResume metódus minden alkalommal meghívódik, amikor a képernyő bemeneti fókuszt kap — első indításkor, másik Activity-ből való visszatéréskor, párbeszédablak bezárásakor, az eszköz feloldásakor. Ez egy forró metódus, amely egy munkamenet során többször is meghívódhat, és megvalósításának a lehető legkönnyebbnek kell lennie.

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", "Nem sikerült a kamerát kötni", e)
            }
        }, ContextCompact.getMainExecutor(this))
    }

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

A CameraX példa az onResume/onPause klasszikus használatát mutatja: a kamera egy kizárólagos erőforrás, amelyet egyszerre csak egy alkalmazás használhat. A kamera életciklushoz kötése a bindToLifecycle segítségével automatikusan bezárja a kamerát onPause-ben, de az explicit unbindAll hívás garantálja az azonnali felszabadítást. Ez különösen fontos az Activity-k közötti váltáskor: a kamerát fel kell szabadítani, mielőtt egy másik Activity megpróbálná megnyitni.

onResume Fragment-ben

Az onResume Fragment-ben azután hívódik meg, hogy a tartalmazó Activity megkapta az onResume-t. A FragmentManager és ViewPager sajátosságai miatt azonban az onResume meghívásának pillanata a Fragment esetében késhet az Activity-hez képest. Például egy ViewPager-ben lévő Fragment offscreenPageLimit = 1 beállítással csak akkor kap onResume-t, amikor az aktuális oldallá válik, nem az Activity indításakor.

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

A userVisibleHint ellenőrzése a Fragment.onResume-ben releváns a ViewPager esetében: a Fragment megkaphatja az onResume-t, de elrejtheti a szomszédos oldal (például animált átmenet során). Ilyen esetekben a videó vagy biometria elindítása az onResume-ben a láthatóság ellenőrzése nélkül váratlan viselkedéshez vezet. A Fragment 1.5.0-tól kezdve ajánlott a FragmentTransaction.setMaxLifecycle() használata a fragmentumok életciklusának pontos szabályozásához ViewPager2-ben.

onResume vs onStart: mikor mit használjunk

A fejlesztők gyakran összekeverik az onStart és onResume metódusokat, és rossz metódusba helyezik a kódot. Fő szabály: onStart — a láthatóságkor működő erőforrásokhoz; onResume — a bemeneti fókuszt igénylő erőforrásokhoz. Vizsgáljuk meg a konkrét forgatókönyveket és a metódus helyes kiválasztását.

MűveletMetódusIndoklás
Geolokációra előfizetésonStart / onStopA GPS részleges láthatóságkor is működhet
Kamera megnyitásaonResume / onPauseKamera — kizárólagos erőforrás
BroadcastReceiveronStart / onStopA rendszeresemények nem igényelnek fókuszt
VideolejátszásonResume / onPauseA videónak láthatónak kell lennie a felhasználó számára
Bluetooth szkennelésonStart / onStopA szkennelés folytatódhat a háttérben
Dictafon (MediaRecorder)onResume / onPauseA felvétel aktív UI-t igényel
SzenzorfelügyelőkonResume / onPauseJátékokhoz és gesztusokhoz érzékelők
Adatok frissítéseonStartFriss adatok szükségesek a megjelenéskor

Gyakorlati szabály: ha a műveletet meg kell szakítani egy párbeszédablak megjelenésekor — használja az onResume/onPause-t. Ha a művelet folytatódhat a képernyő részleges elfedésekor — használja az onStart/onStop-ot. Például a videolejátszónak szüneteltetnie kell a videót párbeszédablak megnyitásakor (onPause), míg a geolokáció folytathatja a frissítést (az onStart-ban marad).

Kizárólagos erőforrások kezelése

A kizárólagos erőforrások olyan eszközösszetevők, amelyeket egy adott pillanatban csak egy alkalmazás használhat. Kamera, mikrofon, videokimenet (MediaProjection), NFC-adapter olvasási módban, USB-eszközök accessory módban — mindezeket az erőforrásokat az onResume-ben kell megnyitni és az onPause-ben felszabadítani.

Munka a MediaRecorder-rel

A MediaRecorder audio és video rögzítésére szolgál. Az engedélyek kérése és a MediaRecorder előkészítése az onCreate-ben történik, a felvétel indítása pedig az onResume-ben. Ha a felhasználó másik alkalmazásra vált, az onPause szünetelteti a felvételt, az onResume pedig folytatja. Ez a szokásos viselkedés a dictafonok és videórögzítő alkalmazások esetében.

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 és onResume

A biometrikus hitelesítést (BiometricPrompt) csak akkor szabad meghívni, amikor az Activity onResume állapotban van. Ha az onCreate-ben vagy onStart-ban hívja meg, a biometrikus párbeszédablak megjelenhet, mielőtt az Activity befejezi az inicializálást, ami az eredmény helytelen feldolgozásához vezet. Az onResume-ben történő meghívás garantálja, hogy a biometrikus ablak a megfelelő kontextusban jelenjen meg.

Minták és ajánlások

Vizsgáljuk meg az onResume-mel való munka három bevált mintáját, amelyeket kereskedelmi projektekben alkalmaznak: az inaktivitási időzítő visszaállítása, a látható adatok frissítése és a Jetpack Navigation integráció.

Inaktivitási időzítő visszaállítása

A bizalmas adatokat kezelő alkalmazásokban (banki, orvosi kártyák) az onResume-t használják az automatikus kilépési időzítő visszaállítására. Ha a felhasználó aktívan interakcióba lép az alkalmazással, az onResume minden képernyőváltáskor meghívódik, és az időzítő visszaáll. Ha a felhasználó minimalizálja az alkalmazást, az onPause leállítja az időzítőt, és az onResume visszatéréskor vagy visszaállítja azt, vagy újrahitelesítést kér.

Adatok frissítése visszatéréskor

A listát, amelynek minden képernyőre való visszatéréskor aktuális adatokat kell mutatnia, az onResume-ben frissítik. Például, ha a felhasználó új rekordot hozott létre egy másik Activity-ben és visszatért, az onResume újratölti a listát a helyi adatbázisból vagy a ViewModel gyorsítótárból. Ez biztosítja az adatok konzisztenciáját a notifyDataSetChanged manuális meghívása nélkül.

kotlin
override fun onResume() {
    super.onResume()
    // Az ActivityResultLauncher visszaadta az eredményt — lista frissítése
    viewModel.refreshList()
    // Inaktivitási időzítő visszaállítása
    inactivityTimer.reset()
}

Jetpack Navigation és onResume

A Jetpack Navigation-ban a fragmentum onResume-je minden, hozzá történő visszatéréskor meghívódik a visszafelé navigáció során. Ezt a tulajdonságot használják a UI állapotának visszaállítására: billentyűzet elrejtése, keresőmezők törlése, eszköztár címének frissítése. Az OnBackPressedCallback az onResume-mel kombinálva teljes irányítást biztosít a navigáció felett kódduplikáció nélkül.

Gyakran Ismételt Kérdések

Mi a különbség az onResume és az onStart között egyszerű szavakkal?

onStart — a képernyő látható. onResume — a képernyő aktív és készen áll az interakcióra. Képzelje el: tévét néz (onStart), de kézbe veszi a távirányítót (onResume). A tévé mindig látható, de az interakció csak a távirányítóval kezdődik. Ha valaki eltakarja a tévét egy függönnyel — a képernyő megszűnik látható lenni (onStop). Ha elveszik a távirányítót — az interakció megszűnik (onPause), de a tévé még mindig látható.

Milyen gyakran hívódik meg az onResume?

Az onResume minden alkalommal meghívódik, amikor az Activity bemeneti fókuszt kap. Minimális szám — egyszer (indításkor). A maximális szám a használati forgatókönyvektől függ: képernyők közötti váltás, párbeszédablakok megnyitása, az eszköz gyors lezárása és feloldása — minden ilyen forgatókönyv meghívja az onResume-t a képernyőre való visszatéréskor.

Miért az onResume a legjobb hely a kamera megnyitására?

A kamera — kizárólagos erőforrás, amely egyszerre csak egy alkalmazás számára elérhető. Ha az onCreate-ben vagy onStart-ban nyitja meg a kamerát, az blokkolva marad más alkalmazások számára még akkor is, ha az Ön alkalmazása inaktív. Az onResume garantálja, hogy a kamera csak akkor van nyitva, amikor az Activity az előtérben van, az onPause pedig azonnal bezárja. Ez az Android-fejlesztés szabványa, amely a CameraX és Camera2 API dokumentációjában van rögzítve.

Előfordulhat, hogy az onResume nem hívódik meg az onStart után?

Igen, az onResume elmaradhat, ha az Activity-t közvetlenül a megjelenés után egy másik Activity elfedi. Például az Activity A elindítja az Activity B-t az onCreate vagy onStart metódusban. Ebben az esetben A onStart — onPause — onStop-ot kap, kihagyva az onResume-t. A rendszer nem hívja meg az onResume-t, mert az Activity A soha nem kapott bemeneti fókuszt.

Mit nem szabad csinálni az onResume-ben?

Az onResume-ben nem szabad hosszú szinkron műveleteket végrehajtani: nagy adatok betöltése a hálózatról, összetett SQL-lekérdezések, képek feldolgozása. Az onResume metódus az UI szálon fut, és bármely 100–200 ms-nál hosszabb blokkolás a felület válaszidejének késleltetéséhez vezet. Az összes nehéz műveletnek aszinkronnak kell lennie — korutinokon, RxJava-n vagy WorkManager-en keresztül. Szintén nem ajánlott a finish() meghívása az onResume-ben ellenőrzés nélkül — ez végtelen újraépítési ciklushoz vezethet.

Összefoglaló

  • onResume — előtér állapot bemeneti fókusszal; az Activity készen áll a felhasználói interakcióra
  • Kizárólagos erőforrások — kamera, mikrofon, videórögzítés az onResume-ben nyílik és az onPause-ben zárul
  • onResume vs onStart — onStart a látható, onResume az aktív erőforrásokhoz; a párbeszédablak megszakítja az onResume-t, de az onStart-ot nem
  • Sebesség — az onResume-nak könnyűnek kell lennie; minden nehéz művelet aszinkron
  • Fragment.onResume — függ a ViewPager-ben lévő láthatóságtól; ellenőrizze a userVisibleHint-t vagy használja a setMaxLifecycle-t
  • Tipikus feladatok — időzítő visszaállítása, adatok frissítése visszatéréskor, BiometricPrompt kezelése
  • onResume/onPause pár — a kizárólagos hozzáférésű erőforrásokat kizárólag ez a pár kezeli

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is