Activity — Android tətbiqinin əsas komponenti, istifadəçi interfeysi olan bir ekranı təmsil edir. Sistem ekranları ciddi həyat dövrü — onCreate, onResume və onDestroy callback-ləri vasitəsilə idarə edir. Hər bir Activity AndroidManifest.xml-də bəyan edilir və Intent vasitəsilə işə salınır. Android tarixi haqqında ətraflı Google-un rəsmi sənədlərində oxuyun.
Əsas məqamlar
Activity — istifadəçi ilə qarşılıqlı əlaqə üçün pəncərə təmin edən Android tətbiqinin əsas komponenti. Hər bir Activity ayrıca ekranı idarə edir: tapşırıq siyahısı, giriş forması, foto baxışı. Android sistemi Activity-ni tələb əsasında yaradır və yaddaş digər tətbiqlərə lazım olduqda məhv edir.
Activity ilk dəfə Android 1.0 (2008)-də ortaya çıxdı və interfeysin əsas tikinti bloku olaraq qalır. Google (2026) məlumatlarına görə, Google Play-dəki tətbiqlərin 98%-i ən azı bir Activity ehtiva edir. Müasir arxitekturada Google çoxlu Fragment ilə bir Activity tövsiyə edir, lakin klassik çoxekranlı tətbiq geniş yayılmış təcrübə olaraq qalır.
Activity stack (back stack) — keçid tarixçəsini saxlayan tapşırıq yığını. İstifadəçi „Geri“ düyməsini basdıqda, cari Activity məhv edilir və əvvəlki bərpa olunur. Sistem yığını avtomatik idarə edir, lakin tərtibatçı launchMode və Intent bayraqları vasitəsilə davranışı idarə edə bilər.
Activity-nin həyat dövrü — ekranın yaradılmadan məhv edilməyə qədər keçdiyi vəziyyətlər və callback-lər dəsti. Lifecycle-i başa düşmək kritik əhəmiyyətlidir: vəziyyətlərlə səhv iş yaddaş sızmalarına, məlumat itkisinə və tətbiqin çökməsinə səbəb olur.
Android sistemi callback-ləri ciddi ardıcıllıqla çağırır. Tərtibatçı resursları ilkinləşdirmək, məlumatları saxlamaq və yaddaşı boşaltmaq üçün lazımi metodları dəyişdirir. Hər callback-ə bir cüt uyğun gəlir: onCreate ↔ onDestroy, onStart ↔ onStop, onResume ↔ onPause.
| Callback | Məqsəd | Tərtibatçının hərəkəti |
|---|---|---|
| onCreate | Activity yaradıldıqda çağırılır | UI-nin ilkinləşdirilməsi, ViewModel-ə abunə |
| onStart | Activity görünən olur | Animasiyaların, kameranın, GPS-in işə salınması |
| onResume | Activity giriş fokusu alır | Video, taymerlərin bərpası |
| onPause | Activity fokusu itirir | Qaralamaların saxlanması, animasiyaların dayandırılması |
| onStop | Activity başqa ekran tərəfindən gizlədilib | Ağır resursların boşaldılması |
| onDestroy | Activity məhv edilir | Abunəliklərin təmizlənməsi, Closeable |
Activity-nin dörd vəziyyəti fərqləndirilir: Running (onResume aktiv), Paused (görünür, lakin fokus yoxdur), Stopped (görünmür), Destroyed (məhv edilib). Sistem yaddaş çatışmazlığı zamanı Stopped vəziyyətində Activity-ni öldürə bilər — məlumatlar onSaveInstanceState-də saxlanmalıdır.
Activity həyat dövrünün üç əsas metodunu Kotlin nümunəsi ilə nəzərdən keçirək. onCreate — giriş nöqtəsi, bir dəfə çağırılır. Burada setContentView vasitəsilə layout bağlanması, RecyclerView-in ilkinləşdirilməsi, LiveData-ya abunə baş verir. onStart — Activity istifadəçi üçün görünən olur. onResume — Activity fokus alır və qarşılıqlı əlaqəyə hazırdır.
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()
}
}Nümunədə onCreate RecyclerView-i ilkinləşdirir və məlumatları yükləyir. onStart geolokasiya yeniləməsini işə salır — yalnız ekran görünəndə işləməli olan resurs. onResume onPause-də dayandırılmış videonu bərpa edir. Bu cür bölgü fonda lazımsız işin qarşısını alır.
Hər bir Activity AndroidManifest.xml faylında bəyan edilməlidir. Qeydiyyat olmadan sistem ekranı tapmayacaq və ActivityNotFoundException istisnası atacaq. Manifestdə sinif adı, tema, oriyentasiya, launchMode və Intent filtrləri göstərilir.
<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 bayrağı digər tətbiqlərin Activity-ni işə sala biləcəyini müəyyən edir. Əsas ekran üçün exported=true, daxili ekranlar üçün — false. parentActivityName atributu standart „Yuxarı“ naviqasiyasını (Up Navigation) aktivləşdirir.
Intent — yerinə yetirilməli hərəkəti təsvir edən obyekt. Activity kontekstində Intent digər ekranı işə salmaq və məlumat ötürmək üçün istifadə olunur. Intent aşkar (müəyyən sinifi göstərir) və qeyri-aşkar (hərəkəti göstərir, sistem uyğun komponenti seçir) ola bilər.
// Açıq Intent — DetailActivity-nin məlumatlarla işə salınması
val intent = Intent(this, DetailActivity::class.java).apply {
putExtra("item_id", itemId)
putExtra("item_name", itemName)
}
startActivity(intent)
// DetailActivity-də məlumatların alınması
val itemId = intent.getLongExtra("item_id", 0L)
val itemName = intent.getStringExtra("item_name") ?: ""İşə salınmış Activity-dən nəticə almaq üçün köhnəlmiş startActivityForResult-u əvəz edən Activity Result API istifadə olunur. Yeni API tip təhlükəsiz, deklarativdir və Jetpack Compose ilə işləyir.
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ın fırlanması və ya konfiqurasiya dəyişikliyi zamanı Android Activity-ni yenidən yaradır — ardıcıl olaraq onDestroy və onCreate-i çağırır. Vəziyyət saxlanılmazsa, istifadəçi daxil etdiyi məlumatları, sürüşdürmə mövqeyini və seçilmiş elementləri itirir. Bu problemi həll etmək üçün Android iki mexanizm təmin edir: onSaveInstanceState və ViewModel.
onSaveInstanceState onDestroy çağırılmazdan əvvəl Bundle-da sadə məlumatları saxlayır. Jetpack-dən ViewModel Activity-nin yenidən yaradılmasına davam gətirir və məlumatları yaddaşda saxlayır, bu mürəkkəb obyektlər və şəbəkə sorğuları üçün daha səmərəlidir.
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ViewModel avtomatik olaraq məlumatları saxlayır
viewModel.items.observe(this) { items ->
updateAdapter(items)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scroll_position", recyclerView.computeVerticalScrollOffset())
}
}Google-un müasir yanaşması — bir Activity və çoxlu Fragment ilə Single Activity arxitekturası. Tətbiq bir MainActivity istifadə edir, bütün naviqasiyanı isə Navigation Component NavHostFragment vasitəsilə yerinə yetirir. Üstünlükləri: mərkəzləşdirilmiş naviqasiya, ekran üzrə ümumi ViewModel, Deep Links ilə düzgün iş.
Jetpack Navigation Component back stack, keçid animasiyaları və arqument ötürülməsi ilə işi avtomatlaşdırır. NavHostFragment Activity layout-da yerləşdirilir, naviqasiya qrafı (NavGraph) isə bütün ekranları və onlar arasındakı əlaqələri təsvir edir. Bu yanaşma Google tərəfindən yeni layihələr üçün tövsiyə olunur və Material Design prinsiplərinə uyğundur.
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-nin AppBar üçün konfiqurasiyası
setupActionBarWithNavController(navController)
}
override fun onSupportNavigateUp() =
navController.navigateUp() || super.onSupportNavigateUp()
}Tez-tez verilən suallar
Activity — öz həyat dövrü olan tam hüquqlu tətbiq ekranı. Fragment — Activity daxilində UI-nin bir hissəsi, Activity-nin yenidən yaradılmasına davam gətirir və onun Lifecycle-dən asılıdır. Activity məcburidir, Fragment isə isteğe bağlıdır.
Məhdudiyyət yoxdur. Hər ekran adətən ayrıca Activity təmsil edir. Sadə tətbiq üçün biri kifayətdir, çoxekranlılar üçün — 5-dən 20-yə qədər. Google çoxlu Fragment ilə bir Activity tövsiyə edir.
launchMode Activity-nin tapşırıq yığınında necə yaradıldığını müəyyən edir. Dörd rejim: standard (yeni nümunə yaradılır), singleTop, singleTask (tapşırıqda bir nümunə) və singleInstance (təcrid olunmuş tapşırıq). Rejim AndroidManifest.xml-də göstərilir.
Intent vasitəsilə — primitivləri, sətirləri, Parcelable və ya Serializable yerləşdirilən ekstraları (putExtra) olan obyekt. Əlaqə üçün Activity Result API istifadə olunur — startActivityForResult-un müasir tip təhlükəsiz əvəzedicisi.
Configuration Change — konfiqurasiya dəyişikliyi zamanı Activity-nin yenidən yaradılması (ekranın fırlanması, dil dəyişikliyi, klaviatura). Sistem onDestroy → onCreate çağırır. Məlumatları saxlamaq üçün onSaveInstanceState və ya Jetpack-dən ViewModel istifadə olunur.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun