onStart: mohiyati, Activity-ning Android ekranida ko'rinishi

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

onStart — Android hayot siklining metodi bo'lib, Activity yoki Fragment foydalanuvchi uchun ko'rinadigan bo'lganda chaqiriladi. Shu momentda ekran qurilma displeyida paydo bo'ladi, lekin hali foydalanuvchi bilan o'zaro aloqada bo'la olmaydi — kiritish fokusi onResume chaqirilgunga qadar mavjud emas. onStart metodi tizim tinglovchilarini ro'yxatdan o'tkazish, geolokatsiya xizmatlariga ulanish va komponent ekranda ko'rinadigan bo'lgan vaqtda ishlashi kerak bo'lgan animatsiyalarni boshlash uchun idealdir. Activity-ning to'liq hayot sikli haqida Activity Lifecycle maqolasida o'qing.

Asosiy

  • onStart — Activity yoki Fragment ekranda ko'rinadigan bo'lganda chaqiriladi; onResume-dan oldin keladi
  • Tinglovchilarni ro'yxatdan o'tkazish — BroadcastReceiver, LocationListener, SensorListener onStart-da ro'yxatdan o'tadi va onStop-da chiqib ketadi
  • Animatsiyalar — ekran ko'rinadigan bo'lgan vaqtda ishlashi kerak bo'lgan animatsiyalarni boshlash; onStop-da to'xtatish
  • Bound-xizmatlar — onStart-da bindService orqali mijoz-server xizmatlariga ulanish, onStop-da uzish
  • onStart vs onResume — onStart = ko'rinish, onResume = fokus + o'zaro aloqa; ekran faolligining turli darajalari
  • Fragment.onStart — Activity.onStart-dan keyin, Fragment konteynerda ko'rinadigan bo'lganda chaqiriladi
  • onStart/onStop juftligi — onStart-da ulangan resurslar onStop-da majburiy bo'shatiladi, oqishning oldini olish uchun

Android-da onStart metodining mohiyati

onStart — Activity hayot siklining ikkinchi metodi bo'lib, tizim tomonidan onCreate-dan keyin (yoki to'xtatilgan holatdan qaytganda onRestart-dan keyin) chaqiriladi. onStart chaqirilgan momentda Activity yoki Fragment ekranda ko'rinadigan bo'ladi. Foydalanuvchi interfeysni ko'radi, lekin ekran hali o'zaro aloqaga tayyor emas — kiritish fokusi faqat onResume-dan keyin paydo bo'ladi.

onStart metodi Activity-ning «ko'rinadigan hayoti» (visible lifetime) tarkibiga kiradi — onStart va onStop orasidagi interval. Bu davrda Activity boshqa oynalar (masalan, shaffof Activity yoki dialog oynasi) tomonidan qisman yopilishi mumkin, lekin uning UI ko'rinadigan bo'lib qoladi. Bu ko'rinadigan hayotni Activity to'liq fokusga ega bo'lgan «old plandagi hayot» (onResume — onPause) dan farqlaydi.

Ushbu uch darajali ierarxiyani tushunish kodni to'g'ri taqsimlash uchun juda muhimdir. onCreate — bir martalik ishga tushirish, onStart — ko'rinadigan resurslarni ulash, onResume — eksklyuziv resurslarga monopol kirish. Bu darajalarni chalkashtirgan dasturchi xotira oqishlari yoki ekranlar o'rtasida o'tishda noto'g'ri xatti-harakatlar xavfini tug'diradi.

Activity-da onStart

Activity-da onStart metodi ekran displeyda har paydo bo'lganda chaqiriladi — ham birinchi ishga tushirishda (onCreate-dan keyin), ham fon rejimidan qaytganda (onRestart-dan keyin). onCreate-dan farqli o'laroq, onStart Activity namunasi hayoti davomida bir necha marta chaqirilishi mumkin, shuning uchun ekran har paydo bo'lganda bajarilishi kerak bo'lgan kod shu joyga joylashtiriladi.

kotlin
class DashboardActivity : AppCompatActivity() {
    private val connectivityReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            val isConnected = ... // ConnectivityManager tekshiruvi
            binding?.statusIndicator?.setColor(
                if (isConnected) Color.GREEN else Color.RED
            )
        }
    }

    override fun onStart() {
        super.onStart()
        registerReceiver(
            connectivityReceiver,
            IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
        )
        SensorManager.getInstance().registerStepCounter()
    }

    override fun onStop() {
        unregisterReceiver(connectivityReceiver)
        SensorManager.getInstance().unregisterStepCounter()
        super.onStop()
    }
}

Asosiy qoida: onStart-da ulangan barcha resurslar onStop-da bo'shatilishi kerak. Bu Activity ekrandan yashiringanda batareyani sarflamasligini, tizim hodisalarini tinglamasligini va xotirani band qilmasligini kafolatlaydi. Android Studio BroadcastReceiver-ni tegishli chiqishsiz ro'yxatdan o'tkazish haqida ogohlantiruvchi lint qoidalariga ega.

Fragment-da onStart

Fragment-da onStart konteyner Activity-ning hayot sikli bilan chambarchas bog'liq. Fragment onStart chaqiruvini faqat uni o'z ichiga olgan Activity onStart olganidan keyin oladi. Biroq, Fragment kechiktirilgan rejimda qo'shilgan bo'lsa (FragmentTransaction.commit() addToBackStack holda), onStart kechikish bilan chaqirilishi mumkin.

kotlin
class MapFragment : Fragment() {
    private var mapView: MapView? = null

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        mapView = MapView(requireContext())
        return mapView!!
    }

    override fun onStart() {
        super.onStart()
        mapView?.onStart()
        LocationService.connect(requireContext())
    }

    override fun onStop() {
        mapView?.onStop()
        LocationService.disconnect()
        super.onStop()
    }
}

Fragment.onStart ning o'ziga xosligi: agar Fragment offscreenPageLimit = 1 bo'lgan ViewPager-da joylashgan bo'lsa, qo'shni fragmentlar ham ko'rinadigan bo'lishdan oldin onStart oladi. Bu tinglovchilarning muddatidan oldin ro'yxatdan o'tishiga olib kelishi mumkin. Bunday hollarda setUserVisibleHint() metodi yoki onStart ichida isVisible tekshiruvi orqali tinglovchilarni faqat haqiqatda ko'rinadigan fragmentlar uchun ro'yxatdan o'tkazing.

onStart va onResume o'rtasidagi farq

onStart va onResume o'rtasidagi asosiy farq — ekran faollik darajasi. onStart Activity ekranda ko'rinadigan, lekin old planda bo'lishi shart emasligini bildiradi. onResume Activity old planda va kiritish fokusiga ega ekanligini bildiradi. Farq dialog oynasi misolida ko'rsatilgan: Activity ustida Dialog paydo bo'lganda, Activity onResume-ni yo'qotadi (onPause chaqiriladi), lekin ko'rinadigan bo'lib qoladi — onStart/onStop chaqirilmaydi.

Farqlar jadvali har bir metod qaysi stsenariylarda chaqirilishini aniq ko'rsatadi:

StsenariyonStartonResume
Ilovani ishga tushirishChaqiriladiChaqiriladi
Activity ustida Dialog ochilganChaqirilmaydionPause (fokus yo'qotilishi)
«Uy» tugmasini bosishonStop (yashirin)onPause → onStop
«Yaqinda» dan qaytishonStart (ko'rinadigan)onResume (fokus)
Ekran aylantirishonCreate → onStart→ onResume
Kiruvchi qo'ng'iroqonStop (yashirin)onPause → onStop

Ushbu jadval dasturchiga aniq kodni qaysi metodga joylashtirishni hal qilishda yordam beradi. Masalan, ilova ekranning har qanday yopilishida (hatto dialog bilan ham) video o'ynatishni to'xtatishi kerak bo'lsa, kod onPause ga joylashtiriladi. Video faqat ekran to'liq yashiringanda to'xtashi kerak bo'lsa — kod onStop ga joylashtiriladi.

Tinglovchilar va xizmatlarni ro'yxatdan o'tkazish

onStart — faqat Activity ekranda ko'rinadigan bo'lgan vaqtda ishlashi kerak bo'lgan tinglovchilarni ro'yxatdan o'tkazish uchun optimal joy. Bu uchta asosiy tizim komponenti turiga tegishli: tizim hodisalari uchun BroadcastReceiver, geolokatsiya uchun LocationListener va qurilma sensorlari uchun SensorListener.

BroadcastReceiver onStart-da

BroadcastReceiver onStart-da Context.registerReceiver() orqali dinamik ro'yxatdan o'tkaziladi va onStop-da unregisterReceiver() orqali chiqariladi. Dinamik ro'yxatdan o'tkazish statikdan (manifestda) afzal, chunki u qabul qilgichning hayotini Activity-ning ko'rinish davri bilan cheklaydi — Activity yashirin bo'lganda ilova tizim broadcast xabarlaridan uyg'onmaydi.

kotlin
private val batteryReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent) {
        val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
        binding?.batteryText?.text = "$level%"
    }
}

override fun onStart() {
    super.onStart()
    registerReceiver(batteryReceiver, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
}

override fun onStop() {
    unregisterReceiver(batteryReceiver)
    super.onStop()
}

LocationListener va SensorListener

Geolokatsiya va sensorlar — resurs talab qiluvchi operatsiyalar. GPS yangilanishlarini onStart-da so'rash va onStop-da bekor qilish, ekran yashirin bo'lganda ilova batareyani sarflamasligini kafolatlaydi. Aniq sozlash uchun minimal interval va masofa bilan requestLocationUpdates ishlatiladi — masalan, 10 soniya va 10 metr, aniqlik va energiya sarfi o'rtasida optimal muvozanatni beradi.

Animatsiyalar va onStart

Animatsiyalarni onStart-da, onCreate-da emas, boshlash animatsiyaning ekran har paydo bo'lganda ishga tushishini kafolatlaydi. Agar animatsiyani onCreate-da boshlasangiz, u faqat Activity birinchi yaratilganda ishlaydi, lekin fon rejimidan qaytganda emas. onStart Activity har ko'rinadigan bo'lganda chaqiriladi, bu uni tsiklik animatsiyalar va o'tishlarni boshlash uchun ideal joyga aylantiradi.

kotlin
private lateinit var pulseAnimator: ValueAnimator

override fun onStart() {
    super.onStart()
    pulseAnimator.start()
    binding?.loadingIndicator?.animate()?.alpha(1f)?.start()
}

override fun onStop() {
    pulseAnimator.cancel()
    binding?.loadingIndicator?.animate()?.cancel()
    super.onStop()
}

ObjectAnimator yoki ValueAnimator ishlatadigan animatsiyalar uchun onStop-da cancel() chaqirish muhimdir. Animatsiya Activity yashiringandan keyin ishlashni davom ettirsa, GPU va CPU resurslarini behuda sarflaydi, qurilma unumdorligini pasaytiradi va batareyaning tez zaryadsizlanishiga olib keladi. Android Studio Profiler (GPU grafigi) faol animatsiyalarni kuzatish va oqishlarni aniqlash imkonini beradi.

onStart/onStop juftlik qoidasi oldindan ko'rish uchun kamera (CameraX) bilan ishlashga ham tegishli. Kamerani onStart-da ochish va onStop-da yopish, ilovangiz ekranda ko'rinmasa, kameraning boshqa ilovalar uchun bloklanmaganligini kafolatlaydi. Ushbu qoidani buzish Google Play-da salbiy sharhlarning tez-tez uchraydigan sabablaridan biridir.

Tez-tez beriladigan savollar

Tinglovchilarni ro'yxatdan o'tkazish uchun onStart va onResume o'rtasidagi farq nima?

onStart — ekran ko'rinadigan bo'lgan vaqtda ishlashi kerak bo'lgan tinglovchilar uchun (BroadcastReceiver, LocationListener, SensorListener). onResume — monopol kirishni talab qiladigan resurslar uchun (kamera, video yozish, nutqni aniqlash). Tizim hodisa tinglovchilari monopol kirishni talab qilmaydi va qisman yopilganda ham ishlashi mumkin — ular onStart-da ro'yxatdan o'tkaziladi. Kamera faqat to'liq fokusda faol bo'lishi kerak — onResume-da ochiladi.

Nega onStart chaqirilmasligi mumkin?

onStart har doim chaqiriladi, agar Activity ko'rinadigan holatga o'tsa. onStart bo'lmagan yagona stsenariy — Activity yaratiladi va darhol tugatiladi (masalan, onCreate-dagi xato tufayli). Bu holda onCreate-dan keyin darhol onDestroy chaqiriladi. Ammo bu to'g'ri yozilgan kodda bo'lmasligi kerak bo'lgan avariya stsenariysidir.

onStart onResume holda chaqirilishi mumkinmi?

Ha, onStart onResume-ni olmasligi mumkin, agar Activity ustida darhol boshqa Activity yoki shaffof oyna ochilsa. Masalan, onCreate-dan keyin avtorizatsiya ekrani ishga tushirilsa (Activity A → Activity B), Activity A da onStart chaqiriladi, lekin onResume yo'q — u B ekrani bilan yopilganda darhol onPause → onStop oladi.

onStart necha marta chaqirilishi mumkin?

onStart Activity namunasi hayoti davomida bir necha marta chaqirilishi mumkin. Activity har safar yashirin holatdan (onStop) ko'rinadigan holatga o'tganda onStart chaqiriladi. Amalda, ilovadan faol foydalanishda onStart sessiya davomida o'nlab yoki yuzlab marta chaqirilishi mumkin.

Ma'lumotlarni onStart-da yuklashga arziydimi?

Ma'lumotlarni onStart-da yuklash ma'lumotlar ekran har paydo bo'lganda yangilanishi kerak bo'lsa, asoslidir. Masalan, yangiliklar lentasi yoki bildirishnomalar ro'yxati. Lekin yuklash asinxron bo'lishi kerak — lifecycleScope bilan korutinlar orqali, UI thread-ni bloklamaslik uchun. Ekran ko'rinishlari o'rtasida o'zgarmaydigan ma'lumotlar uchun ularni bir marta onCreate-da yuklash kifoya.

Xulosa

  • onStart — ko'rinadigan hayot metodi; Activity yoki Fragment ekranda paydo bo'lganda chaqiriladi
  • onStart-da ro'yxatdan o'tkazish — BroadcastReceiver, LocationListener, SensorListener onStart-da ro'yxatdan o'tadi va onStop-da chiqariladi
  • onStart vs onResume — onStart = ko'rinish, onResume = kiritish fokusi; turli resurs turlari uchun turli darajalar
  • Animatsiyalar — tsiklik animatsiyalarni onStart-da boshlash, onStop-da to'xtatish; GPU resurs oqishlarining oldini oladi
  • Fragment.onStart — Activity.onStart bilan bog'liq; ViewPager-da qo'shni fragmentlar uchun oldindan chaqiriladi
  • Juftlik qoidasi — barcha onStart resurslari onStop-da bo'shatilishi kerak, aks holda xotira va batareya oqishi
  • Ma'lumot yuklash — onStart-da ekran har paydo bo'lganda yangilanishi kerak bo'lgan ma'lumotlar yuklanadi

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