Activity — Android dasturining asosiy komponenti, foydalanuvchi interfeysiga ega bitta ekranni ifodalaydi. Tizim ekranlarni qat'iy hayotiy sikl — onCreate, onResume va onDestroy callback'lari orqali boshqaradi. Har bir Activity AndroidManifest.xml da e'lon qilinadi va Intent orqali ishga tushiriladi. Android tarixi haqida batafsil Google rasmiy hujjatlarida o'qing.
Asosiy ma'lumotlar
Activity — foydalanuvchi bilan o'zaro aloqa qilish uchun oyna ta'minlovchi Android dasturining asosiy komponenti. Har bir Activity alohida ekranni boshqaradi: vazifalar ro'yxati, kirish formasi, fotosurat ko'rish. Android tizimi Activity ni so'rov bo'yicha yaratadi va xotira boshqa dasturlarga kerak bo'lganda yo'q qiladi.
Activity birinchi marta Android 1.0 (2008) da paydo bo'lgan va interfeysning asosiy qurilish bloki bo'lib qolmoqda. Google (2026) ma'lumotlariga ko'ra, Google Play dagi dasturlarning 98% kamida bitta Activity ni o'z ichiga oladi. Zamonaviy arxitekturada Google ko'plab Fragment lar bilan bitta Activity ni tavsiya qiladi, ammo klassik ko'p ekranli dastur keng tarqalgan amaliyot bo'lib qolmoqda.
Activity stack (back stack) — o'tishlar tarixini saqlaydigan vazifalar to'plami. Foydalanuvchi „Orqaga“ tugmasini bosganda, joriy Activity yo'q qilinadi va oldingisi tiklanadi. Tizim to'plamni avtomatik boshqaradi, ammo dasturchi launchMode va Intent bayroqlari orqali xatti-harakatni nazorat qilishi mumkin.
Activity hayotiy sikli — ekran yaratilishdan yo'q qilinishgacha o'tadigan holatlar va callback'lar to'plami. Lifecycle ni tushunish juda muhim: holatlar bilan noto'g'ri ishlash xotira oqishiga, ma'lumot yo'qotilishiga va dastur ishdan chiqishiga olib keladi.
Android tizimi callback'larni qat'iy tartibda chaqiradi. Dasturchi resurslarni ishga tushirish, ma'lumotlarni saqlash va xotirani bo'shatish uchun kerakli metodlarni qayta yozadi. Har bir callback ga juftlik mos keladi: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.
| Callback | Maqsad | Dasturchi harakati |
|---|---|---|
| onCreate | Activity yaratilganda chaqiriladi | UI ni ishga tushirish, ViewModel ga obuna |
| onStart | Activity ko'rinadigan bo'ladi | Animatsiyalar, kamera, GPS ni ishga tushirish |
| onResume | Activity kirish fokusini oladi | Video, taymerlarni davom ettirish |
| onPause | Activity fokusni yo'qotadi | Qoralamalarni saqlash, animatsiyalarni to'xtatish |
| onStop | Activity boshqa ekran tomonidan yashirilgan | Og'ir resurslarni bo'shatish |
| onDestroy | Activity yo'q qilinadi | Obunalarni tozalash, Closeable |
Activity ning to'rt holati farqlanadi: Running (onResume faol), Paused (ko'rinadi, ammo fokus yo'q), Stopped (ko'rinmaydi), Destroyed (yo'q qilingan). Tizim xotira yetishmasligida Stopped holatidagi Activity ni o'ldirishi mumkin — ma'lumotlar onSaveInstanceState da saqlanishi kerak.
Activity hayotiy siklining uchta asosiy metodini Kotlin misoli bilan ko'rib chiqamiz. onCreate — kirish nuqtasi, bir marta chaqiriladi. Bu yerda setContentView orqali layout bog'lanishi, RecyclerView ni ishga tushirish, LiveData ga obuna bo'lish amalga oshiriladi. onStart — Activity foydalanuvchi uchun ko'rinadigan bo'ladi. onResume — Activity fokus oladi va o'zaro aloqaga tayyor.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val recyclerView = findViewById<RecyclerView>(R.id.rv_items)
recyclerView.layoutManager = LinearLayoutManager(this)
loadItems()
}
override fun onStart() {
super.onStart()
startLocationUpdates()
}
override fun onResume() {
super.onResume()
resumeVideoPlayer()
}
}Misolda onCreate RecyclerView ni ishga tushiradi va ma'lumotlarni yuklaydi. onStart geolokatsiya yangilanishini ishga tushiradi — faqat ekran ko'rinadigan bo'lganda ishlashi kerak bo'lgan resurs. onResume onPause da to'xtatilgan videoni davom ettiradi. Bunday bo'lish fon ortiqcha ishning oldini oladi.
Har bir Activity AndroidManifest.xml faylida e'lon qilinishi kerak. Ro'yxatdan o'tmasdan tizim ekranni topa olmaydi va ActivityNotFoundException istisnosini chiqaradi. Manifestda sinf nomi, mavzu, orientatsiya, launchMode va Intent filtrlari ko'rsatiladi.
<application
android:allowBackup="true"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DetailActivity"
android:parentActivityName=".MainActivity" />
</application>exported bayrog'i boshqa dasturlar Activity ni ishga tushira olishini aniqlaydi. Asosiy ekran uchun exported=true, ichki ekranlar uchun — false. parentActivityName atributi standart „Yuqoriga“ navigatsiyasini (Up Navigation) yoqadi.
Intent — bajarilishi kerak bo'lgan harakatni tavsiflovchi obyekt. Activity kontekstida Intent boshqa ekranni ishga tushirish va ma'lumot uzatish uchun ishlatiladi. Intent aniq (muayyan sinfni ko'rsatadi) va noaniq (harakatni ko'rsatadi, tizim mos komponentni tanlaydi) bo'lishi mumkin.
// Aniq Intent — DetailActivity ni ma'lumotlar bilan ishga tushirish
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// DetailActivity da ma'lumotlarni olish
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""Ishga tushirilgan Activity dan natija olish uchun eskirgan startActivityForResult o'rnini olgan Activity Result API ishlatiladi. Yangi API tip xavfsiz, deklarativ va Jetpack Compose bilan ishlaydi.
private val getResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val data = result.data?.getStringExtra("result_key")
}
}
fun openPicker() {
val intent = Intent(this, PickerActivity::class.java)
getResult.launch(intent)
}Ekran aylanishi yoki konfiguratsiya o'zgarishida Android Activity ni qayta yaratadi — ketma-ket onDestroy va onCreate ni chaqiradi. Holat saqlanmasa, foydalanuvchi kiritilgan ma'lumotlarni, aylantirish pozitsiyasini va tanlangan elementlarni yo'qotadi. Bu muammoni hal qilish uchun Android ikkita mexanizm taqdim etadi: onSaveInstanceState va ViewModel.
onSaveInstanceState onDestroy chaqirilishidan oldin Bundle da oddiy ma'lumotlarni saqlaydi. Jetpack dan ViewModel Activity qayta yaratilishiga bardosh beradi va ma'lumotlarni xotirada saqlaydi, bu murakkab obyektlar va tarmoq so'rovlari uchun samaraliroq.
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel avtomatik ma'lumotlarni saqlaydi
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}Google ning zamonaviy yondashuvi — bitta Activity va ko'plab Fragment bilan Single Activity arxitekturasi. Dastur bitta MainActivity dan foydalanadi, butun navigatsiyani esa Navigation Component NavHostFragment orqali amalga oshiradi. Afzalliklari: markazlashtirilgan navigatsiya, ekran bo'yicha umumiy ViewModel, Deep Links bilan to'g'ri ishlash.
Jetpack Navigation Component back stack, o'tish animatsiyalari va argument uzatish bilan ishni avtomatlashtiradi. NavHostFragment Activity layout da joylashtiriladi, navigatsiya grafi (NavGraph) esa barcha ekranlar va ular orasidagi bog'lanishlarni tavsiflaydi. Bu yondashuv Google tomonidan yangi loyihalar uchun tavsiya etiladi va Material Design tamoyillariga mos keladi.
class MainActivity : AppCompatActivity() {
private val navController by lazy {
findViewById<NavHostFragment>(R.id.nav_host_fragment)
.navController
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// NavigationUI ni AppBar uchun sozlash
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}Tez-tez beriladigan savollar
Activity — o'z hayotiy sikliga ega to'liq huquqli dastur ekrani. Fragment — Activity ichidagi UI qismi, Activity qayta yaratilishiga bardosh beradi va uning Lifecycle iga bog'liq. Activity majburiy, Fragment ixtiyoriy.
Cheklov yo'q. Har bir ekran odatda alohida Activity ni ifodalaydi. Oddiy dastur uchun bittasi yetarli, ko'p ekranlilar uchun — 5 dan 20 gacha. Google ko'plab Fragment bilan bitta Activity ni tavsiya qiladi.
launchMode Activity vazifalar to'plamida qanday yaratilishini belgilaydi. To'rt rejim: standard (yangi nusxa yaratiladi), singleTop, singleTask (vazifada bitta nusxa) va singleInstance (izolyatsiya qilingan vazifa). Rejim AndroidManifest.xml da ko'rsatiladi.
Intent orqali — primitivlar, satrlar, Parcelable yoki Serializable joylashtiriladigan ekstralar (putExtra) bilan obyekt. Qayta aloqa uchun Activity Result API ishlatiladi — startActivityForResult ning zamonaviy tip xavfsiz o'rnini bosuvchisi.
Configuration Change — konfiguratsiya o'zgarishida (ekran aylanishi, til o'zgarishi, klaviatura) Activity qayta yaratilishi. Tizim onDestroy → onCreate ni chaqiradi. Ma'lumotlarni saqlash uchun onSaveInstanceState yoki Jetpack dan ViewModel ishlatiladi.
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.