onResume — asoslari, Android-da foydalanuvchi bilan o'zaro aloqa

Muallif: IT Sectr Nashr etilgan: 2026-03-04 O'qish vaqti: 10 daq

onResume — bu Android hayot sikli metodi bo'lib, Activity yoki Fragment oldingi planga chiqqanda va kiritish fokusini olganida chaqiriladi. Bu holatda ekran foydalanuvchi bilan o'zaro aloqaga tayyor: barcha teginish hodisalari, tugma bosishlar va imo-ishoralar ushbu komponentga yo'naltiriladi. onResume Activity-ning ish holati bo'lib, ilova vaqtining katta qismini shu yerda o'tkazadi. Aynan shu yerda kamera ochiladi, video ijro etish boshlanadi, nutqni aniqlash ishga tushiriladi va eksklyuziv kirishni talab qiladigan sensor tinglovchilari ro'yxatga olinadi. Activity-ning to'liq hayot sikli haqida Activity Lifecycle maqolasida o'qing.

Asosiy

  • onResume — Activity oldingi planda kiritish fokusi bilan; onStart-dan keyin yoki dialog oynasidan qaytganda chaqiriladi
  • Eksklyuziv resurslar — kamera, mikrofon, video suratga olish onResume-da ochiladi va onPause-da yopiladi
  • onResume/onPause juftligi — to'liq fokus talab qiladigan resurslar ushbu juftlik bilan boshqariladi; onResume-da ro'yxatga olinadi, onPause-da bo'shatiladi
  • onResume vs onStart — onStart = ko'rinish, onResume = o'zaro aloqa; dialog onResume-ni yopadi, lekin onStart-ni emas
  • Vaqtlar — onResume tez bo'lishi kerak; uzoq operatsiyalar interfeys javobini kechiktiradi
  • Fragment.onResume — Activity.onResume-dan keyin, Fragment o'zaro aloqaga tayyor bo'lganda chaqiriladi
  • Jetpack-da onResume — lifecycleScope va LiveData obunalarni avtomatik boshqarish uchun onResume-dan foydalanadi

Android-da onResume metodi asoslari

onResume — Activity hayot siklining uchinchi metodi, onStart-dan keyin chaqiriladi va ekranning foydalanuvchi bilan to'liq o'zaro aloqaga tayyorligini bildiradi. Bu daqiqada Activity vazifalar to'plamining (back stack) cho'qqisida joylashgan, tizim unga barcha kirish hodisalarini yo'naltiradi va ilova foydalanuvchining faol ishtirokini talab qiladigan istalgan operatsiyani boshlashi mumkin: video qo'ng'iroqlar, o'yinlar, audio yozish, Canvas-da chizish.

onResume oldingi plandagi hayotga (foreground lifetime) kiradi — onResume va onPause orasidagi davr. Bu Activity-ning eng faol ish davri bo'lib, ilova maksimal resurslarni sarflaydi: teginishlarni qayta ishlash uchun protsessor, animatsiyalarni ko'rsatish uchun GPU, video suratga olish uchun kamera va mikrofon. Hayot siklining ushbu darajasini tushunish energiya sarfini optimallashtirish uchun muhimdir — onResume-da ochilgan resurslar onPause-da darhol yopilishi kerak.

Google I/O 2025 ma'lumotlariga ko'ra, bir sessiya davomida Activity onResume holatida o'tkazadigan o'rtacha vaqt yangilik ilovalari uchun 2–5 daqiqa, o'yinlar va messenjerlar uchun 15–30 daqiqani tashkil etadi. Qolgan vaqt Activity onPause, onStop yoki onDestroy holatlarida bo'ladi. Bu shuni anglatadiki, aynan onResume kodini optimallashtirish unumdorlik va batareya ishlash muddatida eng katta foyda beradi.

Activity-da onResume

Activity-da onResume metodi ekran har safar kiritish fokusini olganida chaqiriladi — birinchi ishga tushirilganda, boshqa Activity-dan qaytganda, dialog oynasi yopilganda, qurilma qulfi ochilganda. Bu issiq metod bo'lib, sessiya davomida ko'p marta chaqirilishi mumkin va uni amalga oshirish imkon qadar yengil bo'lishi kerak.

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", "Kamerani bog'lash muvaffaqiyatsiz tugadi", e)
            }
        }, ContextCompact.getMainExecutor(this))
    }

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

CameraX misoli onResume/onPause klassik qo'llanilishini ko'rsatadi: kamera eksklyuziv resurs bo'lib, ma'lum bir vaqtda faqat bitta ilova tomonidan ishlatilishi mumkin. Kamerani bindToLifecycle orqali hayot siklga bog'lash onPause-da avtomatik ravishda yopadi, ammo aniq unbindAll chaqiruvi darhol bo'shatilishini kafolatlaydi. Bu Activity-lar o'rtasida almashishda ayniqsa muhim: kamera boshqa Activity uni ochishga urinishidan oldin bo'shatilishi kerak.

Fragment-da onResume

Fragment-da onResume uni o'z ichiga olgan Activity onResume olganidan keyin chaqiriladi. Biroq, FragmentManager va ViewPager xususiyatlari tufayli Fragment uchun onResume chaqiruvi Activity-ga nisbatan kechiktirilishi mumkin. Masalan, offscreenPageLimit = 1 bo'lgan ViewPager-dagi Fragment onResume-ni faqat joriy sahifa bo'lganda oladi, Activity boshlanganda emas.

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

Fragment.onResume-da userVisibleHint tekshiruvi ViewPager uchun dolzarb: Fragment onResume olishi mumkin, ammo qo'shni sahifa tomonidan yashirilgan bo'lishi mumkin (masalan, animatsiyali o'tishda). Bunday hollarda ko'rinishni tekshirmasdan onResume-da video yoki biometriyani ishga tushirish kutilmagan xatti-harakatga olib keladi. Fragment 1.5.0 dan boshlab ViewPager2 da fragmentlar hayot siklini aniq boshqarish uchun FragmentTransaction.setMaxLifecycle() dan foydalanish tavsiya etiladi.

onResume vs onStart: qachon nimani ishlatish

Dasturchilar ko'pincha onStart va onResume-ni aralashtirib, kodni noto'g'ri metodga joylashtiradilar. Asosiy qoida: onStart — ko'rinishda ishlaydigan resurslar uchun; onResume — kiritish fokusini talab qiladigan resurslar uchun. Keling, aniq stsenariylarni va metodni to'g'ri tanlashni ko'rib chiqaylik.

OperatsiyaMetodAsoslash
Geolokatsiyaga obunaonStart / onStopGPS qisman ko'rinishda ishlashi mumkin
Kamerani ochishonResume / onPauseKamera — eksklyuziv resurs
BroadcastReceiveronStart / onStopTizim hodisalari fokus talab qilmaydi
Video ijro etishonResume / onPauseVideo foydalanuvchiga ko'rinishi kerak
Bluetooth skanerlashonStart / onStopSkanerlash fonda davom etishi mumkin
Ovoz yozish (MediaRecorder)onResume / onPauseYozish faol UI talab qiladi
Sensor tinglovchilarionResume / onPauseO'yinlar va imo-ishoralar uchun sensorlar
Ma'lumotlarni yangilashonStartYangi ma'lumotlar paydo bo'lganda kerak

Amaliy qoida: agar operatsiya dialog oynasi paydo bo'lganda to'xtatilishi kerak bo'lsa — onResume/onPause dan foydalaning. Agar operatsiya ekran qisman yopilganda davom etishi mumkin bo'lsa — onStart/onStop dan foydalaning. Masalan, video pleyer dialog ochilganda videoni to'xtatishi kerak (onPause), geolokatsiya esa yangilanishni davom ettirishi mumkin (onStart-da qoladi).

Eksklyuziv resurslarni boshqarish

Eksklyuziv resurslar — ma'lum bir vaqtda faqat bitta ilova tomonidan ishlatilishi mumkin bo'lgan qurilma komponentlaridir. Kamera, mikrofon, video chiqishi (MediaProjection), o'qish rejimidagi NFC adapteri, accessory rejimidagi USB qurilmalari — barcha bu resurslar onResume-da ochilishi va onPause-da bo'shatilishi kerak.

MediaRecorder bilan ishlash

MediaRecorder audio va video yozish uchun ishlatiladi. Ruxsat so'rovi va MediaRecorder-ni tayyorlash onCreate-da, yozishni boshlash esa onResume-da amalga oshiriladi. Agar foydalanuvchi boshqa ilovaga o'tsa, onPause yozishni to'xtatadi, onResume esa uni tiklaydi. Bu ovoz yozish va video suratga olish ilovalari uchun standart xatti-harakatdir.

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 va onResume

Biometrik autentifikatsiya (BiometricPrompt) faqat Activity onResume holatida bo'lganda chaqirilishi kerak. Agar uni onCreate yoki onStart-da chaqirsangiz, biometriya dialogi Activity inisializatsiyani tugatmasdan oldin paydo bo'lishi mumkin, bu esa natijani noto'g'ri qayta ishlashga olib keladi. onResume-da chaqirish biometriya oynasi to'g'ri kontekstda ko'rsatilishini kafolatlaydi.

Namunalar va tavsiyalar

Tijorat loyihalarida qo'llaniladigan onResume bilan ishlashning uchta tasdiqlangan namunasini ko'rib chiqaylik: harakatsizlik taymerini qayta o'rnatish, ko'rinadigan ma'lumotlarni yangilash va Jetpack Navigation bilan integratsiya.

Harakatsizlik taymerini qayta o'rnatish

Maxfiy ma'lumotlarga ega ilovalarda (bank ishi, tibbiy kartalar) onResume avtomatik chiqish taymerini qayta o'rnatish uchun ishlatiladi. Agar foydalanuvchi ilova bilan faol o'zaro aloqada bo'lsa, onResume ekranlar o'rtasidagi har bir o'tishda chaqiriladi va taymer qayta o'rnatiladi. Agar foydalanuvchi ilovani kichraytirsa, onPause taymerni to'xtatadi va qaytganda onResume uni qayta o'rnatadi yoki qayta autentifikatsiyani talab qiladi.

Qaytganda ma'lumotlarni yangilash

Ekran har qaytganda dolzarb ma'lumotlarni ko'rsatishi kerak bo'lgan ro'yxat onResume-da yangilanadi. Masalan, foydalanuvchi boshqa Activity-da yangi yozuv yaratib, orqaga qaytsa, onResume ro'yxatni mahalliy ma'lumotlar bazasidan yoki ViewModel keshidan qayta yuklaydi. Bu notifyDataSetChanged-ni qo'lda chaqirmasdan ma'lumotlar izchilligini ta'minlaydi.

kotlin
override fun onResume() {
    super.onResume()
    // ActivityResultLauncher natija qaytardi — ro'yxatni yangilaymiz
    viewModel.refreshList()
    // Harakatsizlik taymerini qayta o'rnatish
    inactivityTimer.reset()
}

Jetpack Navigation va onResume

Jetpack Navigation-da fragmentning onResume-si orqaga navigatsiya orqali unga har qaytishda chaqiriladi. Bu xususiyat UI holatini qayta o'rnatish uchun ishlatiladi: klaviaturani yashirish, qidiruv maydonlarini tozalash, asboblar paneli sarlavhasini yangilash. OnBackPressedCallback onResume bilan birgalikda kodni takrorlamasdan navigatsiya ustidan to'liq nazorat beradi.

Tez-tez beriladigan savollar

onResume va onStart o'rtasidagi farq oddiy so'zlar bilan nima?

onStart — ekran ko'rinadi. onResume — ekran faol va o'zaro aloqaga tayyor. Tasavvur qiling: televizor ko'ryapsiz (onStart), lekin pultni qo'lingizga olyapsiz (onResume). Televizor har doim ko'rinadi, lekin o'zaro aloqa faqat pult bilan boshlanadi. Agar kimdir televizorni parda bilan yopsa — ekran ko'rinmay qoladi (onStop). Agar pultni sizdan olishsa — o'zaro aloqa to'xtaydi (onPause), ammo televizor hali ham ko'rinadi.

onResume qanchalik tez-tez chaqiriladi?

onResume Activity har safar kiritish fokusini olganida chaqiriladi. Minimal son — bir marta (ishga tushirilganda). Maksimal son foydalanish stsenariylariga bog'liq: ekranlar o'rtasida almashish, dialoglarni ochish, qurilmani tez bloklash va qulfini ochish — har bir bunday stsenariy ekranga qaytganda onResume-ni chaqiradi.

Nima uchun onResume kamerani ochish uchun eng yaxshi joy?

Kamera — ma'lum bir vaqtda faqat bitta ilova uchun mavjud bo'lgan eksklyuziv resurs. Agar kamerani onCreate yoki onStart-da ochsangiz, ilovangiz nofaol bo'lsa ham, u boshqa ilovalar uchun bloklangan holda qoladi. onResume kameraning faqat Activity oldingi planda bo'lganda ochiqligini kafolatlaydi, onPause esa darhol uni yopadi. Bu CameraX va Camera2 API hujjatlarida mustahkamlangan Android rivojlanish standartidir.

onResume onStart-dan keyin chaqirilmasligi mumkinmi?

Ha, Activity paydo bo'lgandan so'ng darhol boshqa Activity bilan qoplansa, onResume sodir bo'lmasligi mumkin. Masalan, Activity A onCreate yoki onStart metodida Activity B ni ishga tushiradi. Bu holda A onStart → onPause → onStop oladi, onResume-ni o'tkazib yuboradi. Tizim onResume-ni chaqirmaydi, chunki Activity A hech qachon kiritish fokusini olmagan.

onResume-da nima qilish mumkin emas?

onResume-da uzun sinxron operatsiyalarni bajarish mumkin emas: tarmoqdan katta ma'lumotlarni yuklash, murakkab SQL so'rovlari, tasvirlarni qayta ishlash. onResume metodi UI oqimida ishlaydi va 100–200 ms dan uzoqroq har qanday blokirovka interfeys javobini kechiktiradi. Barcha og'ir operatsiyalar asinxron bo'lishi kerak — korutinalar, RxJava yoki WorkManager orqali. Shuningdek, tekshirmasdan onResume-da finish() chaqirish tavsiya etilmaydi — bu cheksiz qayta yaratish siklga olib kelishi mumkin.

Xulosa

  • onResume — kiritish fokusi bilan oldingi plan holati; Activity foydalanuvchi bilan o'zaro aloqaga tayyor
  • Eksklyuziv resurslar — kamera, mikrofon, video suratga olish onResume-da ochiladi va onPause-da yopiladi
  • onResume vs onStart — onStart ko'rinadigan, onResume faol resurslar uchun; dialog onResume-ni to'xtatadi, lekin onStart-ni emas
  • Tezlik — onResume yengil bo'lishi kerak; barcha og'ir operatsiyalar asinxron
  • Fragment.onResume — ViewPager-da ko'rinishga bog'liq; userVisibleHint tekshirilishi yoki setMaxLifecycle ishlatilishi kerak
  • Odatiy vazifalar — taymerni qayta o'rnatish, qaytganda ma'lumotlarni yangilash, BiometricPrompt boshqaruvi
  • onResume/onPause juftligi — eksklyuziv kirishga ega resurslar faqat ushbu juftlik tomonidan boshqariladi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing