Mobil ilovaning hayotiy tsikli uning ishga tushirish, kichraytirish, fondan qaytish va yopish paytida qanday harakat qilishini belgilaydi. Ushbu maqolada biz App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle va LifecycleOwner haqida gaplashamiz. Bu jarayonlarni tushunish xotira oqishi, ma'lumot yo'qotilishi va ilovaning noto'g'ri ishlashining oldini olish uchun juda muhimdir. Batafsil ma'lumot uchun rasmiy Android Activity Lifecycle hujjatlariga qarang.
Asosiy fikrlar
Alohida ekranlarning hayotiy tsikliga o'tishdan oldin, butun ilovaning hayotiy tsiklini tushunish muhimdir. iOS da ilova besh holatdan o'tadi: Not Running (ishga tushirilmagan), Inactive (fondada, hodisalarni qabul qilmaydi), Active (faol), Background (fondada, kod bajarilmoqda) va Suspended (fondada, kod to'xtatilgan). Bu holatlar AppDelegate da applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground va applicationWillTerminate metodlari orqali boshqariladi.
Android da uning ekvivalenti Application.ActivityLifecycleCallbacks interfeysi orqali kuzatiladigan Application Lifecycle dir. Biroq, Android ko'proq Activity — alohida ilova ekranining hayotiy tsikliga e'tibor qaratadi. Buning sababi Android ilovasi har biri o'z tsikliga ega bo'lgan bir nechta Activity lardan iborat bo'lishi mumkin.
Android da zamonaviy yondashuv lifecycle-process kutubxonasidan ProcessLifecycleOwner ni ishlatishdir. U ma'lum bir Activity ga bog'lanmagan holda butun jarayonning holatini kuzatish imkonini beradi. iOS da ilova holatini kuzatish uchun UISceneDelegate (iOS 13 dan) yoki AppDelegate ishlatiladi. SceneDelegate iPad da bir nechta oynalarni (multiwindow) boshqaradi. App Lifecycle ni tushunish fon sinxronizatsiyasi, striming va VoIP qo'ng'iroqlari bo'lgan ilovalarni ishlab chiqishda IT Sectr uchun ayniqsa muhimdir.
Activity Android ilovasining asosiy komponenti bo'lib, bitta ekranni ifodalaydi. Activity foydalanuvchi harakatlari va tizim hodisalariga (ekran aylanishi, kiruvchi qo'ng'iroq, xotira yetishmasligi) javoban operatsion tizim tomonidan boshqariladigan aniq belgilangan hayotiy tsiklga ega.
| Metod | Tavsif | Nima qilish kerak |
|---|---|---|
| onCreate | Activity yaratilganda bir marta chaqiriladi | UI ni boshlash, findViewById, ViewModel sozlash |
| onStart | Activity ko'rinadigan bo'ladi | Animatsiyalarni boshlash, BroadCastReceiver ro'yxatdan o'tkazish |
| onResume | Activity kirish fokusini oladi | Kamera, sensorlar, animatsiyalarni boshlash |
| onPause | Activity fokusni yo'qotadi (qisman ko'rinadi) | Qoralamalarni saqlash, animatsiyalarni to'xtatish |
| onStop | Activity ko'rinmaydi | Resurslarni bo'shatish, yangilanishlarni to'xtatish |
| onDestroy | Activity yo'q qilinadi | Barcha havolalarni tozalash, LiveData dan obunani bekor qilish |
| onRestart | onStop dan keyin onStart dan oldin chaqiriladi | Qayta boshlash |
Muhim: onSaveInstanceState vaqtinchalik holatni saqlash uchun onStop dan oldin chaqiriladi. Tiklash onCreate da Bundle savedInstanceState yoki ViewModel dagi SavedStateHandle orqali amalga oshiriladi. Hayotiy tsikl to'g'ri boshqarilmasa, ekran aylantirilganda ilova barcha saqlanmagan ma'lumotlarni yo'qotadi.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("draft", draftText)
}
override fun onDestroy() {
super.onDestroy()
// Отписка от всех подписок
}
}
Jetpack Compose da Activity ning hayotiy tsikli o'zgarishsiz qoladi, ammo Compose qo'shimcha vositalarni taqdim etadi: LifecycleOwner orqali Hayotiy tsikldan xabardor kompozitsiya, yo'q qilishda avtomatik resurs tozalash uchun LifecycleEventEffect va DisposableEffect effektlari.
Android da Fragment Activity ichida yashaydi va o'z hayotiy tsikliga ega, bu qisman Activity bilan mos keladi, lekin yangi metodlarni qo'shadi. Fragment lar Activity ni yo'q qilmasdan qo'shilishi, almashtirilishi, olib tashlanishi mumkin, bu ularni yanada moslashuvchan, lekin murakkabroq qiladi.
Fragment Lifecycle ning asosiy metodlari: onAttach — Fragment Activity ga biriktirildi (birinchi chaqiruv); onCreate — ma'lumotlarni boshlash; onCreateView — View yaratish; onViewCreated — View yaratildi, UI sozlanishi mumkin; onStart — Fragment ko'rinadi; onResume — Fragment fokusda; onPause — Fragment fokusni yo'qotadi; onStop — Fragment ko'rinmaydi; onDestroyView — View yo'q qilinadi; onDestroy — Fragment yo'q qilinadi; onDetach — Fragment Activity dan ajratiladi.
Activity dan asosiy farq: onCreateView va onDestroyView bir necha marta chaqirilishi mumkin (masalan, TabLayout almashtirilganda), onCreate esa bir marta chaqiriladi. Shunga ko'ra, View ni boshlash onViewCreated da amalga oshirilishi kerak, onCreateView da emas. View bilan bog'liq resurslar (masalan, RecyclerView adapterlari) onDestroyView da tozalanishi kerak.
UIViewController iOS da ekranlarni boshqarish uchun asosiy sinfdir. Uning hayotiy tsikli UIKit avtomatik ravishda chaqiradigan metodlar ketma-ketligidan iborat. Bu tsiklni tushunish to'g'ri UI boshlash, ma'lumotlarni boshqarish va xotirani boshqarish uchun juda muhimdir.
| Metod | Qachon chaqiriladi | Odatdagi foydalanish |
|---|---|---|
| loadView | View Controller o'z View ierarxiyasini yuklaganda | Storyboardsiz maxsus boshlash |
| viewDidLoad | View xotiraga yuklangandan keyin (bir marta) | UI sozlash, dastlabki ma'lumotlarni yuklash |
| viewWillAppear | View ekranda paydo bo'lishidan oldin | Ma'lumotlarni yangilash, bildirishnomalarga obuna bo'lish |
| viewDidAppear | View ekranda paydo bo'lganidan keyin | Animatsiyalarni boshlash, kuzatuv animatsiyalarini boshlash |
| viewWillDisappear | View ekrandan yo'qolishidan oldin | Holatni saqlash, bildirishnoma obunasini bekor qilish |
| viewDidDisappear | View ekrandan yo'qolganidan keyin | Animatsiyalarni to'xtatish, resurslarni bo'shatish |
| dealloc | View Controller yo'q qilinganda | Barcha resurslarni bo'shatish |
Muhim: viewDidLoad View Controllerning hayoti davomida faqat bir marta chaqiriladi. Har bir paydo bo'lishda ma'lumotlarni yangilash uchun viewWillAppear dan foydalaning. Agar viewWillAppear da NotificationCenter ga obuna bo'lsangiz, xotira oqishining oldini olish uchun viewDidDisappear da obunani bekor qilganingizga ishonch hosil qiling.
SwiftUI View tuzilmalari orqali View larning hayotiy tsiklini boshqaradi. Qayta chaqiruv metodlari o'rniga SwiftUI onAppear va onDisappear modifikatorlaridan foydalanadi. Global ilova holatlari uchun App va Scene protokollari orqali App Lifecycle ishlatiladi. SwiftUI holatga asoslangan holda View larning yaratilishi va yo'q qilinishini avtomatik boshqaradi, bu rivojlanishni soddalashtiradi, ammo View identifikatori va umrini tushunishni talab qiladi.
struct ContentView: View {
var body: some View {
Text("Hello")
.onAppear {
print("View появилась")
}
.onDisappear {
print("View исчезла")
}
}
}
LifecycleOwner Android Architecture Components dan olingan interfeys bo'lib, hayotiy tsikliga ega ob'ektni (Activity, Fragment) belgilaydi. LifecycleObserver ob'ektga LifecycleOwner hodisalariga obuna bo'lish imkonini beradigan interfeysdir. Ular birgalikda zamonaviy Android rivojlanishida reaktiv hayotiy tsikl boshqaruvining asosini tashkil qiladi.
onStart/onStop da metodlarni aniq chaqirish o'rniga, DefaultLifecycleObserver (eskirgan LifecycleObserver va @OnLifecycleEvent annotatsiyalarining o'rnini bosuvchi) dan foydalanish tavsiya etiladi. Bu Activity yoki Fragment ga to'g'ridan-to'g'ri havolalarsiz hayotiy tsikliga reaksiya ko'rsatishi kerak bo'lgan ViewModel va boshqa komponentlar uchun Google tomonidan ilgari surilgan yondashuvdir.
class MyObserver : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
// Подписка на обновления
}
override fun onStop(owner: LifecycleOwner) {
// Отписка
}
}
IT Sectr da biz barcha Android loyihalarida LifecycleOwner dan foydalanamiz. ViewModel viewModelScope va lifecycleScope orqali Activity ning LifecycleOwner iga obuna bo'ladi va Activity yo'q qilinganda korutinlarning avtomatik bekor qilinishini kafolatlaydi. Bu xotira oqishining oldini oladi va kodni toza va xavfsizroq qiladi.
Tez-tez so'raladigan savollar
Activity olti holatdan o'tadi: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).
Tartib: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad bir marta chaqiriladi.
LifecycleOwner Activity yoki Fragment ning hayotiy tsikliga ega bo'lgan Android Architecture Components komponentidir. LifecycleObserver orqali hodisalarga obuna bo'lish imkonini beradi.
iOS ilovasi besh holatdan o'tadi: Not Running, Inactive, Active, Background, Suspended. O'tishlar UIApplicationDelegate orqali boshqariladi.
Saved State ekran aylanishi yoki jarayonni qayta yaratishda Activity/Fragment holatini saqlaydigan Android mexanizmidir. onSaveInstanceState va SavedStateHandle dan foydalanadi.
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.