onCreate — bu nima, Android-da Activity inicializatsiyasi

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

onCreate — Android-da Activity va Fragment hayotiy siklining birinchi va yagona majburiy metodidir. Sistema komponent yaratilganda uni bir marta chaqiradi, avval saqlangan holatga ega Bundle parametrini uzatadi. onCreate ichida dasturchi foydalanuvchi interfeysini inicializatsiya qiladi, View elementlarini bog'laydi, hodisa ishlovchilarini sozlaydi va savedInstanceState dan ma'lumotlarni tiklaydi. onCreate ni to'g'ri amalga oshirmasdan hech qanday Android ilovasini ishga tushirib bo'lmaydi — bu har bir ekran uchun kirish nuqtasidir. Activity ning umumiy hayotiy sikli haqida Activity Lifecycle maqolasida o'qing.

Asosiy fikrlar

  • onCreate — hayotiy siklining birinchi va yagona majburiy metodi; Activity yoki Fragment yaratilganda bir marta chaqiriladi
  • Bundle parametri — savedInstanceState onSaveInstanceState da saqlangan ma'lumotlarni yoki Activity birinchi marta yaratilayotgan bo'lsa null ni o'z ichiga oladi
  • setContentView — Activity uchun onCreate ichida majburiy chaqiruv; XML tartibni kod bilan bog'laydi
  • UI inicializatsiyasi — findViewById, RecyclerView adapterlarini sozlash, bosish tinglovchilarini o'rnatish — onCreate ning odatiy vazifalari
  • Fragment.onCreate — Activity dan farq qiladi: bu yerda setContentView chaqirilmaydi, tartib onCreateView orqali uzatiladi
  • Vaqt cheklovi — onCreate 5 soniya ichida tugashi kerak (ANR chegarasi), uzoq operatsiyalar fon oqimiga o'tkaziladi
  • ViewModel va onCreate — onCreate da ViewModel inicializatsiyasi ma'lumotlarga ekran aylanishida yo'qotmasdan omon qolish imkonini beradi

Android da onCreate nima

onCreate — Android yangi Activity yoki Fragment namunasini yaratishda chaqiradigan qayta chaqiruv (callback) metodi. Bu foydalanuvchi ekrani kodiga birinchi kirish nuqtasi: onCreate chaqirilgunga qadar hech qanday foydalanuvchi kodi bajarilmaydi. Sistema metodga Bundle parametrini uzatadi, u yo avval saqlangan ma'lumotlarni o'z ichiga oladi (qayta yaratishda) yoki null ga teng (birinchi ishga tushirishda).

onCreate metodi android.app.Activity klassida va androidx.fragment.app.Fragment klassida aniqlangan. Ikkala variant ham o'xshash vazifalarni bajaradi: komponentni inicializatsiya qilish, UI ni sozlash va holatni tiklash. Biroq aniq amalga oshirish farqlanadi — Activity tartibni yuklash uchun setContentView dan foydalanadi, Fragment esa View ni onCreateView orqali qaytaradi. Dasturchi Activity da hech bo'lmaganda onCreate ni bekor qilishi shart — busiz Android ekranni ko'rsata olmaydi.

onCreate Activity namunasining to'liq hayotiy sikli davomida qat'iy bir marta chaqiriladi. Hatto ekran aylanishida ham, yangi Activity namunasi oldingi namunaning Bundle i bilan yangi onCreate chaqiruvini oladi. Bu xususiyat onCreate ni bir martalik inicializatsiya uchun ideal joyga aylantiradi: ma'lumotlarni yuklash, adapterlarni yaratish, Dagger yoki Hilt orqali DI komponentlarini sozlash.

Activity da onCreate

Activity da onCreate metodi to'rtta asosiy vazifani bajaradi: layout tartibini yuklash, View elementlarini inicializatsiya qilish, Bundle dan holatni tiklash va birlamchi hodisa ishlovchilarini sozlash. onCreate dagi majburiy minimal kod — super.onCreate(savedInstanceState) va setContentView(R.layout.activity_main) chaqiruvi.

kotlin
class MainActivity : AppCompatActivity() {
    private var binding: ActivityMainBinding? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ViewBinding — findViewById ning zamonaviy o'rnini bosuvchi
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding?.root)

        // Binding yordamida inicializatsiya
        binding?.apply {
            welcomeText.text = getString(R.string.welcome)
            startButton.setOnClickListener { startGame() }
        }

        // Holatni tiklash
        if (savedInstanceState != null) {
            score = savedInstanceState.getInt("score", 0)
            binding?.scoreText?.text = score.toString()
        }
    }
}

Zamonaviy amaliyot — findViewById o'rniga ViewBinding dan foydalanish. ViewBinding kompilyatsiya bosqichida ActivityMainBinding klassini yaratadi, bu noto'g'ri ID lar bilan bog'liq xatolarni bartaraf qiladi va shablon kod hajmini kamaytiradi. Google Android Studio 3.6 dan boshlab ViewBinding ni Activity va Fragment da View ga kirishning standart usuli sifatida tavsiya qiladi.

onCreate dagi harakatlar tartibi qat'iy bo'lishi kerak: avval super, keyin setContentView, so'ng qolgan hamma narsa. setContentView dan oldin findViewById ni chaqirish null qaytaradi — tartib hali yuklanmagan va View elementlari iyerarxiyada mavjud emas. Bu boshlang'ich Android dasturchilarining eng keng tarqalgan xatolaridan biridir.

Fragment da onCreate

Fragment da onCreate Activity dan farq qiladi: bu yerda setContentView chaqirilmaydi, faqat UI bilan bog'liq bo'lmagan ma'lumotlarni inicializatsiya qilish bajariladi. Fragment komponent yaratish va View yaratishni ikkita alohida metodga ajratadi: onCreate (bir marta chaqiriladi) va onCreateView (View har yaratilganda yoki qayta yaratilganda chaqiriladi).

kotlin
class UserListFragment : Fragment() {
    private lateinit var viewModel: UserViewModel
    private var binding: FragmentUserListBinding? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // ViewModel inicializatsiyasi — View ning qayta yaratilishini omon qoladi
        viewModel = ViewModelProvider(this)[UserViewModel::class.java]

        // FragmentManager dan argumentlar
        arguments?.let {
            viewModel.loadUser(it.getString("user_id") ?: "")
        }

        // Aylanishda saqlash
        retainInstance = true
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        binding = FragmentUserListBinding.inflate(inflater, container, false)
        return binding!!.root
    }
}

Activity va Fragment onCreate o'rtasidagi asosiy farq: Fragment dagi onCreate View bilan bog'liq kodni o'z ichiga olmasligi kerak, chunki View yo'q qilinishi va qayta yaratilishi mumkin (masalan, ViewPager varaqlarini almashtirishda), onCreate esa faqat bir marta chaqiriladi. Ma'lumotlarni yuklash, ViewModel ni sozlash va adapterlarni inicializatsiya qilish — onCreate ning vazifalari, View ni bog'lash esa onViewCreated ning vazifasidir.

savedInstanceState va holatni tiklash

onCreate dagi savedInstanceState parametri — Activity yoki Fragment ning vaqtinchalik holatini saqlash va tiklash mexanizmidir. Sistema Activity ni yo'q qilganda (ekran aylanishi, xotira yetishmasligi), onSaveInstanceState() ni chaqiradi, unga dasturchi Bundle da kalit-qiymat juftligini joylashtiradi. Yangi namuna yaratilganda, bu Bundle onCreate da qaytariladi.

Bundle quyidagi ma'lumot turlarini qo'llab-quvvatlaydi: String, Integer, Boolean, Long, Float, Double, ularning massivlari, shuningdek Parcelable va Serializable obyektlari. Murakkab obyektlar uchun Parcelable ishlatiladi — bu Android ga xos bo'lgan samaraliroq serializatsiya mexanizmidir. Bundle hajmi taxminan 500 KB bilan cheklangan — chegaradan oshib ketish TransactionTooLargeException istisnosiga sabab bo'ladi.

kotlin
companion object {
    private const val KEY_USER_NAME = "user_name"
    private const val KEY_SCORE = "score"
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_game)

    if (savedInstanceState != null) {
        userName = savedInstanceState.getString(KEY_USER_NAME) ?: ""
        currentScore = savedInstanceState.getInt(KEY_SCORE)
    }
}

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString(KEY_USER_NAME, userName)
    outState.putInt(KEY_SCORE, currentScore)
}

Buni tushunish muhim: onSaveInstanceState foydalanuvchi Activity ni finish() yoki “Orqaga” tugmasi orqali yopganda chaqirilmaydi. Sistema bu holatda foydalanuvchi ongli ravishda ishni tugatayotgan deb hisoblaydi va holatni saqlash talab qilinmaydi. Shuning uchun uzoq muddatli ma'lumot saqlash uchun faqat savedInstanceState ga tayanib bo'lmaydi — Room, DataStore yoki SharedPreferences dan foydalaning.

OnCreate vaqti va cheklovlari

onCreate asosiy (UI) oqimida bajariladi va sistema uning tugashini kutadi, keyin Activity ni ekranda ko'rsatadi. Agar onCreate 5 soniyadan ko'proq davom etsa, sistema ANR (Application Not Responding) dialog oynasini ko'rsatadi va foydalanuvchiga ilovani yopishni taklif qiladi. Tarmoqdan ma'lumot yuklash yoki ma'lumotlar bazasidan o'qish kabi uzoq operatsiyalar fon oqimiga o'tkazilishi kerak.

Google Android Performance (2025) tavsiyalariga ko'ra, onCreate o'rta segment qurilmalarida 1 soniyadan kam vaqtda tugashi kerak. Buning uchun: lazy inicializatsiyadan (Kotlin da lazy delegati) foydalaning, og'ir ma'lumotlarni yuklashni onResume yoki korutinlar orqali kechiktiring, kam ishlatiladigan UI komponentlari uchun ViewStub ni qo'llang, ishga tushirish vaqtini Android Vitals orqali profillang.

kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Lazy inicializatsiya — obyekt faqat birinchi murojaatda yaratiladi
    val heavyData by lazy {
        HeavyDataLoader.load()
    }

    // Fon oqimida lifecycleScope orqali ma'lumot yuklash
    lifecycleScope.launch(Dispatchers.IO) {
        val users = userDao.getAllUsers()
        withContext(Dispatchers.Main) {
            adapter.submitList(users)
        }
    }
}

Profillash vositalari: Android Studio Profiler (CPU varag'i) har bir metodning aniq bajarilish vaqtini ko'rsatadi. Android Vitals da (Google Play konsoli) “Sovuq ishga tushirish vaqti” metrikasini kuzatish mumkin — agar Activity ngizning onCreate i 500 ms dan oshsa, konsol buni performans muammosi sifatida belgilaydi. Biz IT Sectr da CI quvurida har bir Activity ning ishga tushirish vaqtini avtomatik nazorat qilish uchun Macrobenchmark testlaridan foydalanamiz.

ViewModel va onCreate

ViewModel — onCreate da ekran aylanishini omon qolishi kerak bo'lgan ma'lumotlarni inicializatsiya qilishning eng yaxshi usulidir. ViewModel onCreate da ViewModelProvider orqali yaratiladi va konfiguratsiya o'zgarishida avtomatik saqlanadi. Activity aylanishdan keyin qayta yaratilganda, ViewModel xotirada qoladi va onCreate ma'lumot yo'qotmasdan bir xil ViewModel ni oladi.

kotlin
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_profile)

    // ViewModel bir marta yaratiladi va konfiguratsiya o'zgarishlarini omon qoladi
    val viewModel: ProfileViewModel =
        ViewModelProvider(this)[ProfileViewModel::class.java]

    // LiveData kuzatuvi — UI ma'lumot o'zgarganda avtomatik yangilanadi
    viewModel.user.observe(this) { user ->
        binding?.userName?.text = user.name
        binding?.userEmail?.text = user.email
    }

    // ViewModel yangi yaratilgan bo'lsa ma'lumot yuklash
    if (savedInstanceState == null) {
        viewModel.loadProfile(userId)
    }
}

ViewModel + LiveData/StateFlow kombinatsiyasi ekran aylanishi muammosini Bundle da qo'lda saqlashsiz hal qiladi. ViewModel ma'lumotlarni xotirada saqlaydi, LiveData qayta yaratishda Activity ni avtomatik qayta obuna qiladi, StateFlow (Kotlin Coroutines dan) esa korutinlarni qo'llab-quvvatlash bilan reaktivlik qo'shadi. Bu Google tomonidan Guide to App Architecture qo'llanmasida tavsiya etilgan standart arxitekturadir.

OnCreate bilan ishlashda keng tarqalgan xatolar

Hatto tajribali dasturchilar ham onCreate da tipik xatolarga yo'l qo'yadilar. Keling, eng keng tarqalgan beshta muammo va ulardan qochish usullarini ko'rib chiqaylik.

setContentView dan oldin View bilan ishlash

Eng keng tarqalgan xato — setContentView chaqirilmasdan oldin findViewById orqali View topishga urinish. Barcha View elementlari tartib inflyatsiyasi momentida yaratiladi, shuning uchun setContentView dan oldin findViewById ga har qanday murojaat null qaytaradi va View dan foydalanishga urinishda NullPointerException ga sabab bo'ladi. Yechim: qat'iy tartib — avval super, keyin setContentView, so'ng findViewById yoki ViewBinding.

UI oqimini uzoq operatsiyalar bilan bloklash

Tarmoqdan ma'lumot yuklash, ma'lumotlar bazasidan o'qish yoki katta massivlarni to'g'ridan-to'g'ri onCreate da qayta ishlash birinchi kadr renderini bloklaydi. Foydalanuvchi onCreate tugaguncha qora ekranni ko'radi, bu ilova tezligini idrok etishni yomonlashtiradi. Yechim: asinxron operatsiyalar uchun lifecycleScope.launch dan foydalaning, yuklash tugaguncha skelet (placeholder UI) ko'rsating.

savedInstanceState ni e'tiborsiz qoldirish

Ekran aylanishida Bundle dan holat tiklanmasa, foydalanuvchi barcha saqlanmagan kiritishni yo'qotadi: forma maydonlaridagi matn, aylantirish pozitsiyasi, tanlangan elementlar. Yechim: ma'lumotlarni tiklash uchun onCreate da har doim savedInstanceState != null ni tekshiring, hatto holat yo'qotilishi dargumon bo'lsa ham.

Anonim klasslar orqali xotira sizib chiqishi

OnCreate dagi anonim klasslar va lambdalar Activity yo'q qilingandan keyin unga yashirin havolani saqlab qolishi mumkin. Masalan, onCreate da yaratilgan Handler Activity yo'q qilingandan keyin ham kechiktirilgan vazifalarni bajarishda davom etadi. Yechim: LifecycleObserver, ViewModel va lifecycleScope dan foydalaning, ular yo'q qilishda vazifalarni avtomatik bekor qiladi.

Fragment onCreate da haddan tashqari inicializatsiya

Fragment onCreate da View ni inicializatsiya qilish — mantiqiy xato, chunki View onCreate chaqirilmasdan qayta yaratilishi mumkin. Agar tinglovchi onCreate da o'rnatilsa va View onCreateView da bog'lansa, qayta yaratishda tinglovchi eski View da qoladi. Yechim: barcha View ishini onViewCreated da bajaring, onCreate ni faqat ma'lumot qatlamini inicializatsiya qilish uchun qoldiring.

Tez-tez beriladigan savollar

Activity da onCreate ni bekor qilish majburiymi?

Ha, onCreate ni bekor qilish majburiydir foydalanuvchi interfeysini ko'rsatadigan har bir Activity uchun. Busiz setContentView ni chaqirish va XML tartibni yuklash mumkin emas. Agar Activity UI ga ega bo'lmasa (masalan, shaffof Activity-zastrupka), onCreate baribir bekor qilinadi, lekin setContentView chaqirilmasdan.

OnCreate Activity yo'q qilinmasdan qayta chaqirilishi mumkinmi?

Yo'q, onCreate bir xil Activity namunasi uchun qayta chaqirilishi mumkin emas. Agar Activity yo'q qilinib qayta yaratilsa (ekran aylanishi, xotira yetishmasligi), bu yangi onCreate chaqiruviga ega yangi namunadir. Istisno — recreate() metodi, Activity ni majburiy yo'q qiladi va qayta yaratadi, lekin bu ham yangi namunani yaratishdir.

super.onCreate chaqirilmasa nima bo'ladi?

Agar super.onCreate(savedInstanceState) chaqirilmasa, Android Runtime SuperNotCalledException istisnosini tashlaydi va ilova ishdan chiqadi. Sistema har bir bekor qilingan hayotiy sikl metodining o'z super versiyasini chaqirishini qat'iy talab qiladi — bu ichki holat mashinasining to'g'ri ishlashini kafolatlaydi.

Activity dagi onCreate Fragment dagi onCreate dan nima bilan farq qiladi?

Asosiy farq: Activity dagi onCreate UI ni setContentView orqali yuklaydi, Fragment dagi onCreate esa faqat ma'lumotlarni inicializatsiya qiladi. Fragment View ni alohida onCreateView metodida yaratadi, u bir necha marta chaqirilishi mumkin (masalan, varaqlarni almashtirishda), Fragment onCreate esa Fragment namunasi umri davomida bir marta chaqiriladi.

OnCreate dan boshqa metodlarga ma'lumotlarni qanday uzatish mumkin?

OnCreate da inicializatsiya qilingan ma'lumotlar Activity yoki Fragment sinfining maydonlarida saqlanadi. Masalan, private lateinit var binding: ActivityMainBinding sinf darajasida e'lon qilinadi, onCreate da inicializatsiya qilinadi va barcha keyingi metodlarda mavjud bo'ladi. Ekran aylanishini omon qoladigan ma'lumotlar uchun ViewModel dan LiveData yoki StateFlow bilan foydalaning.

Xulosa

  • onCreate — hayotiy siklining majburiy metodi, Activity yoki Fragment yaratilganda bir marta chaqiriladi
  • setContentView — Activity uchun majburiy chaqiruv, XML tartibni yuklaydi; Fragment uchun tartib onCreateView orqali yuklanadi
  • savedInstanceState — qayta yaratishda saqlangan holat bilan Bundle; birinchi ishga tushirishda null
  • Vaqt cheklovi — onCreate 1 soniyadan kam bajarilishi kerak, uzoq operatsiyalar korutinlarga o'tkaziladi
  • ViewModel — onCreate da ViewModel inicializatsiyasi ekran aylanishida ma'lumot yo'qotish muammosini hal qiladi
  • Fragment vs Activity — Fragment onCreate UI kodni o'z ichiga olmaydi, Activity onCreate setContentView orqali tartibni yuklaydi
  • Besh tipik xato — setContentView dan oldin View bilan ishlash, UI bloklanishi, Bundle ni e'tiborsiz qoldirish, xotira sizib chiqishi, Fragment.onCreate da UI kodi

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