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 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 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.
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 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.
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.
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.
| Operatsiya | Metod | Asoslash |
|---|---|---|
| Geolokatsiyaga obuna | onStart / onStop | GPS qisman ko'rinishda ishlashi mumkin |
| Kamerani ochish | onResume / onPause | Kamera — eksklyuziv resurs |
| BroadcastReceiver | onStart / onStop | Tizim hodisalari fokus talab qilmaydi |
| Video ijro etish | onResume / onPause | Video foydalanuvchiga ko'rinishi kerak |
| Bluetooth skanerlash | onStart / onStop | Skanerlash fonda davom etishi mumkin |
| Ovoz yozish (MediaRecorder) | onResume / onPause | Yozish faol UI talab qiladi |
| Sensor tinglovchilari | onResume / onPause | O'yinlar va imo-ishoralar uchun sensorlar |
| Ma'lumotlarni yangilash | onStart | Yangi 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 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 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.
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()
}
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.
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.
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.
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.
override fun onResume() {
super.onResume()
// ActivityResultLauncher natija qaytardi — ro'yxatni yangilaymiz
viewModel.refreshList()
// Harakatsizlik taymerini qayta o'rnatish
inactivityTimer.reset()
}
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
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 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.
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.
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 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
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.