onStop — bu nima, Android hayot siklida Activityni yashirish

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

onStop — Androidda Activity hayot siklidagi metod bo'lib, tizim tomonidan Activity foydalanuvchiga ko'rinmay qolganda chaqiriladi. Activity yangi Activity uni to'liq yopgandan so'ng yoki ilova minimallashtirilganda Stopped holatiga o'tadi. onStop metodida ishlab chiquvchi animatsiyalarni to'xtatishi, kamera va sensorlar resurslarini bo'shatishi, kiritilgan ma'lumotlarning qoralamalarini saqlashi shart. Android Vitals (Google, 2025) ma'lumotlariga ko'ra, onStopni to'g'ri ishlash ilovani minimallashtirishda ANR (Application Not Responding) sonini 35% ga kamaytiradi. onStopdan so'ng tizim onRestart (ekranga qaytish) yoki onDestroy (to'liq tugatish) ni chaqirishi mumkin. Android Developers-ning Activity hayot sikli haqidagi hujjatlari onStopni ko'rinadigan va ko'rinmaydigan holat o'rtasidagi chegara sifatida tasvirlaydi.

Asosiy fikrlar

  • onStop — Activityning to'liq ko'rinmasligida chaqiriladigan metod, ammo Activity hali ham xotirada joylashgan.
  • onStopdan so'ng Activity Stopped holatiga o'tadi — xotirada tirik, lekin ko'rinmaydi va foydalanuvchi bilan aloqada bo'lmaydi.
  • Tizim Activityga qaytishda onRestart → onStart → onResume yoki tugatishda onDestroy ni chaqirishi mumkin.
  • onStopda resurslarni bo'shatish kerak: animatsiyalarni to'xtatish, sensorlar va kamerani o'chirish, oraliq ma'lumotlarni saqlash.
  • onStopni to'g'ri amalga oshirish — ko'p vazifalilik va minimallashtirishda ilova barqarorligining asosiy omili.

Androidda onStop nima?

onStop — AppCompatActivity sinfi (va uning o'tmishdoshi Activity) ning callback metodi bo'lib, Android operatsion tizimi tomonidan Activity foydalanuvchi uchun to'liq ko'rinmas holga kelganda chaqiriladi. Shu paytda Activity boshqa Activity, dialog oynasi, tizim ishga tushirgichi yoki blokirovka ekrani tomonidan yashirilgan. Hayot sikli nuqtai nazaridan, onStop onPausedan keyin keladi va Activity endi ekranda ko'rinmasligini bildiradi, garchi Activity obyekti va uning holati xotirada qolsa.

Activity Stopped (to'xtatilgan) holatiga o'tganda, u o'z holatini operativ xotirada saqlaydi — barcha maydonlar, View iyerarxiyasi va ViewModel mavjud bo'lib qoladi. Bu Stoppedni yo'q qilingan (Destroyed) holatdan farqlaydi, bunda Activity butunlay o'chiriladi. System UI xotira yetishmasligida Stopped holatidagi ilova jarayonini o'ldirishi mumkin — bu process death deb ataladi. Ishlab chiquvchi kritik ma'lumotlarni (qoralamalar, aylantirish pozitsiyasi) onStopdan oldin chaqiriladigan onSaveInstanceState() da saqlashi shart, bu jarayon o'ldirilganda tiklanishni kafolatlaydi.

Android Compatibility Definition Document (CDD) 14+ versiyasi spetsifikatsiyasiga ko'ra, Stopped holatidagi jarayon OOM Killer tomonidan o'ldirishda past ustuvorlikka ega — Background fazasidagi jarayonlardan past, lekin keshlangan jarayonlardan yuqori. Google statistikasiga ko'ra, jarayonlarni o'ldirishning 68% hollari Activity Stopped holatida bo'lganda sodir bo'ladi, Paused emas.

onStop qachon chaqiriladi: stsenariylar va tartib

onStop Activityning to'liq ko'rinmasligida chaqiriladi, sababidan qat'i nazar: joriy Activity ustida yangi Activityni ishga tushirish, ilovani minimallashtirish (Home tugmasi), ekranni bloklash, kiruvchi qo'ng'iroq yoki tizim dialogini ochish. Barcha bu hollarda Activity avval onPause (qisman fokus yo'qotilishi), keyin onStop (to'liq ko'rinmaslik) oladi.

onStopni chaqirishning asosiy stsenariylari:

  • Joriy Activity ustida yangi Activityni ishga tushirish — joriy Activity onPause, keyin onStop oladi; yangi Activity onCreate → onStart → onResume dan o'tadi.
  • Ilovani minimallashtirish (Home) — Activity 200–300 ms ichida onPause → onStop ga o'tadi, xotirada Stopped holatida qoladi.
  • Ekranni bloklash — tizim onPause → onStop ni chaqiradi, chunki bloklash ekrani Activityni to'liq yopadi.
  • Kiruvchi qo'ng'iroq — telefon Activity (Dialer) tepada ishga tushadi, joriy Activity onStop ga o'tadi.
  • Boshqa ilovaga o'tish (Recent Apps) — Activity yashirinadi, onStop oladi, lekin jarayon keshlarida qoladi.

Muhim: onStop chaqirilmaydi ekran aylantirilganda — bu holda Activity yo'q qilinadi (onPause → onStop → onDestroy) va qayta yaratiladi (onCreate → onStart → onResume). Istisno — manifestdagi android:configChanges="orientation" flagi, bunda Activity qayta yaratilmaydi, balki onConfigurationChanged() chaqirig'ini oladi.

Activity hayot siklida onStop

onStop Activity hayot sikli ketma-ketligida markaziy o'rinni egallaydi — ko'rinadigan va ko'rinmaydigan holat o'rtasida. To'liq ketma-ketlik: onCreate → onStart → onResume → (faol holat) → onPause → onStop → onDestroy (yoki qaytishda onRestart → onStart → onResume).

HolatMetodKo'rinishAloqaXotira
CreatedonCreateYo'qYo'qAjratiladi
StartedonStartQismanYo'qTo'liq
ResumedonResumeTo'liqHaTo'liq
PausedonPauseQismanYo'qTo'liq
StoppedonStopYo'qYo'qTo'liq*
DestroyedonDestroyYo'qYo'qBo'shatilgan

*Stopped holatida Activity xotirada saqlanadi, lekin resurs yetishmasligida tizim tomonidan o'ldirilishi mumkin. Stopped jarayonlarini o'ldirish ustuvorligi — oxirgidan oldingi, faqat bo'sh keshlangan jarayonlardan yuqori.

onStop va onSaveInstanceState: Tizim UI dinamik holatini saqlash uchun onStopdan oldin onSaveInstanceState(Bundle) ni chaqiradi. Ishlab chiquvchi bu metodni Bundlega kiritish maydonlari qiymatlarini, RecyclerView pozitsiyasini, tanlangan elementlarni saqlash uchun qayta belgilaydi. Activity yo'q qilinmasa ham (foydalanuvchi shunchaki minimallashtirib qaytgan bo'lsa), Bundle konfiguratsiya o'zgarishlarida onCreate ga uzatiladi. Google faqat o'tkinchi UI holatini saqlashni tavsiya qiladi — Activity tashqarisida yashaydigan repository yoki ViewModel ma'lumotlarini emas.

onStopda qanday resurslarni bo'shatish kerak

onStopda ishlab chiquvchi Activity ko'rinmas bo'lganda kerak bo'lmagan barcha resurslarni bo'shatishi shart. Bu batareya, protsessor va xotira yukini kamaytiradi, shuningdek faollikka qaytishda ANRning oldini oladi.

onStopda nimani bo'shatish kerak:

  • Animatsiyalar va transitions — ObjectAnimator, ValueAnimator, ViewPropertyAnimator to'xtatilishi kerak. Ko'rinmaydigan Activityning ishlayotgan animatsiyasi GPU sikllarini behuda sarflaydi.
  • Sensorlar (Sensors) — SensorManagerdan (akselerometr, giroskop, magnitometr) chiqish. Sensorlar yashirin Activityda ham energiya sarflaydi.
  • Kamera va mikrofon — Camera2 yoki CameraX bo'shatilishi, MediaRecorder to'xtatilishi kerak. Yashirin Activityda kamerani faol qoldirish Google Play siyosati bilan taqiqlangan.
  • LocationListener — FusedLocationProviderClient yoki LocationManager dan chiqish. Geolokatsiya — eng energiya talab qiladigan resurs.
  • Network listeners — WebSocket yopilishi, fonda kerak bo'lmagan HTTP so'rovlari bekor qilinishi kerak.
  • MediaPlayer va ExoPlayer — agar fon ijrosi davom etmasligi kerak bo'lsa, pauzaga qo'yish yoki to'xtatish.

onStopda nima qilmaslik kerak: Uzoq muddatli operatsiyalarni bajarmang — katta ma'lumotlarni ma'lumotlar bazasida saqlash, tarmoq so'rovlari, murakkab hisob-kitoblar. onStop asosiy oqimda bajariladi va Activityga qaytishni bloklaydi. Uzoq muddatli operatsiyalar uchun kechikish bilan WorkManager yoki viewModelScope dagi koroutinlardan foydalaning. ViewModel resurslarini bo'shatmang — ViewModel onStopdan omon qoladi va qaytishda ishlatiladi.

onStop va onPause o'rtasidagi farq

onPause va onStop ko'rinish yo'qotilishi darajasi va majburiy harakatlar hajmi bilan farqlanadi. onPause qisman fokus yo'qotilishida chaqiriladi (masalan, dialog oynasi yoki tizim menyusi ochilishi), onStop — to'liq ko'rinmaslikda. Bu farq har bir bosqichda qanday resurslarni bo'shatishni tanlash uchun muhimdir.

XususiyatonPauseonStop
Ko'rinish darajasiQisman ko'rinadiTo'liq ko'rinmaydi
FokusYo'qotilganYo'qotilgan
Bajarilish vaqti500 ms gacha5 s gacha (ANR vaqt chegarasi)
Bo'shatiladigan resurslarKritik (media, kamera)Barcha ko'rinmaydigan (sensorlar, animatsiyalar, location)
TiklanishonResumeonRestart → onStart → onResume
Jarayon ustuvorligiYuqori (Foreground)O'rta (Background)

Umumiy qoida: onPause da boshqa ilovaning foydalanuvchi tajribasiga darhol ta'sir qiladigan tizim resurslarini (kamera, mediapleer) bo'shating, onStop da — yashirin Activityda kerak bo'lmagan barcha qolgan resurslarni. Google onPause da kritik foydalanuvchi ma'lumotlarini (elektron pochta qoralamasi, sozlamalar) saqlashni tavsiya qiladi, chunki tez almashishda onStop kelmasligi mumkin.

onStop → onRestart: ekranga qaytish

Foydalanuvchi yashirilgan Activityga qaytganda, tizim onRestart → onStart → onResume ni chaqiradi. onRestart metodi Activity Stopped holatidan qaytayotganini bildiradi. Bu onStopda bo'shatilgan UI va resurslarni tiklash uchun muhim bosqichdir.

Qaytishda chaqiruvlar ketma-ketligi:

  • onRestart() — Activity qayta ko'rsatilishi haqida xabardor qilinadi. Odatiy harakatlar: ma'lumotlarni qayta yuklash, ro'yxatlarni yangilash.
  • onStart() — Activity ko'rinadigan bo'ladi, lekin hali faol emas. Bu yerda onStopda bo'shatilgan resurslar qayta ishga tushiriladi.
  • onResume() — Activity fokus oladi va aloqaga tayyor. Animatsiyalar ishga tushadi, sensorlar ro'yxatga olinadi.

Agar ilova jarayoni Stopped holatida tizim tomonidan o'ldirilgan bo'lsa, onRestart o'rniga onCreate chaqiriladi va onSaveInstanceState dan Bundle holatni tiklash uchun uzatiladi. Bu stsenariy (process death) — Android ilovalaridagi eng keng tarqalgan xatolardan biri: ishlab chiquvchilar onRestartni amalga oshiradilar, lekin jarayon o'ldirilgandan so'ng onCreate orqali tiklanishni hisobga olmaydilar.

Kotlinda onStop bilan kod misollari

Misol 1: Sensorlarni bo'shatish bilan asosiy onStop amalga oshirilishi

Activity yashiringanda sensorlardan to'g'ri chiqish va animatsiyani to'xtatishni ko'rsatadi. Ekranga qaytganidan so'ng resurslar onStartda tiklanadi.

kotlin
class MainActivity : AppCompatActivity() {
    private lateinit var sensorManager: SensorManager
    private var accelerometer: Sensor? = null
    private var rotationAnimator: ObjectAnimator? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
    }

    override fun onStart() {
        super.onStart()
        accelerometer?.let {
            sensorManager.registerListener(sensorListener, it, SensorManager.SENSOR_DELAY_NORMAL)
        }
        rotationAnimator = ObjectAnimator.ofFloat(findViewById(R.id.icon), "rotation", 0f, 360f)
        rotationAnimator?.apply {
            duration = 3000
            repeatMode = ValueAnimator.RESTART
            repeatCount = ValueAnimator.INFINITE
            start()
        }
    }

    override fun onStop() {
        super.onStop()
        sensorManager.unregisterListener(sensorListener)
        rotationAnimator?.cancel()
    }

    override fun onRestart() {
        super.onRestart()
        Log.d("MainActivity", "Activity Stopped holatidan qaytadi")
    }

    private val sensorListener = SensorEventListener { event, _ ->
        Log.d("MainActivity", "Accel: x=${event.values[0]}, y=${event.values[1]}, z=${event.values[2]}")
    }
}

Kod akselerometr sensorini ro'yxatga oladi va onStartda cheksiz aylanish animatsiyasini ishga tushiradi. onStopda sensor o'chiriladi va animatsiya bekor qilinadi — bu yashirin Activityda batareya sarfini oldini oladi. onRestart → onStart orqali qaytgandan so'ng resurslar qayta yaratiladi.

Misol 2: SavedStateHandle orqali holatni saqlash bilan onStop

ViewModel + SavedStateHandle dan foydalanadigan zamonaviy yondashuv. Forma ma'lumotlari qo'lda Bundle holda onStopda avtomatik saqlanadi.

kotlin
class FormViewModel(
    private val savedStateHandle: SavedStateHandle
) : ViewModel() {
    var email: String
        get() = savedStateHandle["email"] ?: ""
        set(value) { savedStateHandle["email"] = value }

    var message: String
        get() = savedStateHandle["message"] ?: ""
        set(value) { savedStateHandle["message"] = value }
}

class FormActivity : AppCompatActivity() {
    private val viewModel: FormViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_form)
        Log.d("FormActivity", "onCreate: email=${viewModel.email}")
    }

    override fun onStop() {
        super.onStop()
        Log.d("FormActivity", "onStop: ma'lumotlar SavedStateHandle da saqlandi")
    }
}

SavedStateHandle onSaveInstanceState vaqtida qiymatlarni avtomatik Bundle da saqlaydi, bu onStopdan oldin chaqiriladi. Ekran aylantirilganda yoki jarayon o'ldirilganda ma'lumotlar yo'qotilmasdan tiklanadi. Google to'g'ridan-to'g'ri onSaveInstanceState o'rniga formalar va qoralamalar uchun SavedStateHandle ni tavsiya qiladi.

Misol 3: onStopdagi operatsiyalar uchun lifecycleScope

onStopga o'tishda asinxron ma'lumot saqlash uchun koroutinlar bilan lifecycleScope dan foydalanish. Koroutina IO dispetcherida ishga tushiriladi, asosiy oqimni bloklamaydi.

kotlin
class NoteActivity : AppCompatActivity() {
    private val noteRepository = NoteRepository()

    override fun onStop() {
        lifecycleScope.launch(Dispatchers.IO) {
            val text = findViewById<EditText>(R.id.note_content).text.toString()
            noteRepository.saveDraft(text)
            withContext(Dispatchers.Main) {
                Log.d("NoteActivity", "Qoralama onStop da saqlandi")
            }
        }
        super.onStop()
    }
}

lifecycleScope.launch koroutinasi Activity hayot sikli tugasa avtomatik bekor qilinadi. Dispatchers.IO dan foydalanish ma'lumotlar bazasiga yoki faylga yozish Activityga qaytishni bloklamasligini kafolatlaydi. Google ma'lumotlariga ko'ra, lifecycleScope dagi koroutinlar onStopda asinxron operatsiyalar uchun afzal qilingan usuldir.

Tez-tez so'raladigan savollar

onStop onDestroy dan qanday farq qiladi?

onStop — Activity ko'rinmas bo'ladi, lekin xotirada Stopped holatida qoladi. Tizim Activityni onRestart orqali qaytarishi mumkin. onDestroy — Activity yo'q qilinadi, xotira bo'shatiladi. onDestroy dan so'ng qaytish faqat Activityning yangi namunasini yaratish orqali mumkin (onCreate).

super.onStop() ni chaqirish majburiymi?

Ha, majburiy. super.onStop() tizim komponentlarining to'g'ri ishlashini ta'minlaydi: fragmentlar, LoaderManager, ViewModelStore. super.onStop() ni o'tkazib yuborish xotira oqishlari va fragmentlarning noto'g'ri tiklanishiga olib kelishi mumkin. Har doim super.onStop() ni oxirgi yoki birinchi chaqiring — tartib muhim emas, lekin chaqiruv majburiydir.

onStop chaqirilganligini qanday tekshirish mumkin?

Hayot siklining har bir metodida Log.d yoki Timber dan foydalaning. Activity-ning tagi bilan logcat filtrini yoqing. Ishlab chiqarish uchun Android Vitals dan foydalaning — Google avtomatik hayot sikli metrikalarini to'playdi va Play Console da anomaliyalarni ko'rsatadi. Shuningdek ProcessLifecycleOwner orqali hayot sikli monitoringi mavjud.

onStop da istisno tashlansa nima bo'ladi?

onStop da ushlanmagan istisno ilovaning Force Close bo'lishiga sabab bo'ladi. Tizim hayot sikli callbacklarida istisnolarni ushlamaydi. Agar onStop da istisno tashlashi mumkin bo'lgan operatsiyalar (fayllar bilan ishlash, tarmoq) bajarilsa, ularni try-catch bilan o'rab oling va super.onStop() bajarilishini to'xtatmasdan xatoni qayd eting.

onStop da Bitmap ni bo'shatish kerakmi?

Yo'q, Activity dagi Bitmap unga havola bo'lmasa GC tomonidan yig'iladi. onStop da majburiy bo'shatish (recycle()) talab qilinmaydi va hatto zararli — Activity onRestart orqali qaytsa, Bitmap qayta yuklanishi kerak bo'ladi. Tasvirlarni yuklash uchun Glide yoki Coil dan foydalaning — bu kutubxonalar avtomatik keshlash va hayot siklini boshqaradi.

Xulosa

  • onStop — Activity hayot sikli metodi, to'liq ko'rinmaslikda chaqiriladi. Activity xotirada Stopped holatida qoladi.
  • onStopdan so'ng ikkita stsenariy mumkin: onRestart (ekranga qaytish) yoki onDestroy (Activityni yo'q qilish).
  • onStopda sensorlar, animatsiyalar, kamera, location tinglovchilarni bo'shatish kerak — ko'rinmaydigan Activityda kerak bo'lmagan hamma narsa.
  • onStop onPausedan ko'rinish darajasi bilan farqlanadi: onPause — qisman, onStop — to'liq ko'rinmaslik.
  • onSaveInstanceState onStopdan oldin chaqiriladi — o'tkinchi UI holatini saqlash uchun foydalaning.
  • Dispatchers.IO bilan lifecycleScope koroutinlari — onStopda asinxron operatsiyalar uchun afzal qilingan usul.
  • Har doim super.onStop() ni chaqiring va Force Closedan qochish uchun xavfli operatsiyalarni try-catch bilan o'rab oling.

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