Mobil tətbiqin həyat dövrü onun işə salınma, kiçildilmə, fondan qayıtma və bağlanma zamanı necə davrandığını müəyyən edir. Bu məqalədə App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle və LifecycleOwner haqqında danışacağıq. Bu prosesləri başa düşmək yaddaş sızması, məlumat itkisi və tətbiqin düzgün işləməməsinin qarşısını almaq üçün kritik əhəmiyyət daşıyır. Ətraflı məlumat üçün rəsmi Android Activity Lifecycle sənədləşməsinə baxın.
Əsas məqamlar
Fərdi ekranların həyat dövrünə keçməzdən əvvəl bütün tətbiqin həyat dövrünü başa düşmək vacibdir. iOS-da tətbiq beş vəziyyətdən keçir: Not Running (işə salınmayıb), Inactive (fondadır, hadisələri qəbul etmir), Active (aktiv), Background (fondadır, kod icra olunur) və Suspended (fondadır, kod dayandırılıb). Bu vəziyyətlər AppDelegate-də applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground və applicationWillTerminate metodları vasitəsilə idarə olunur.
Android-də bunun ekvivalenti Application.ActivityLifecycleCallbacks interfeysi vasitəsilə izlənilən Application Lifecycle-dır. Bununla belə, Android daha çox Activity-nin — fərdi tətbiq ekranının — həyat dövrünə diqqət yetirir. Bunun səbəbi Android tətbiqinin hər biri öz dövrünə malik çoxsaylı Activity-lərdən ibarət ola bilməsidir.
Android-də müasir yanaşma lifecycle-process kitabxanasından ProcessLifecycleOwner istifadə etməkdir. O, müəyyən bir Activity-yə bağlanmadan bütün prosesin vəziyyətini izləməyə imkan verir. iOS-da tətbiq vəziyyətini izləmək üçün UISceneDelegate (iOS 13-dən) və ya AppDelegate istifadə olunur. SceneDelegate iPad-də çoxlu pəncərələri (multiwindow) idarə edir. App Lifecycle-ı başa düşmək fon sinxronizasiyası, yayım və VoIP zəngləri olan tətbiqlər hazırlayarkən IT Sectr üçün xüsusilə vacibdir.
Activity Android tətbiqinin əsas komponentidir, bir ekranı təmsil edir. Activity-nin istifadəçi hərəkətləri və sistem hadisələrinə (ekranın fırlanması, daxil olan zəng, yaddaşın azlığı) cavab olaraq əməliyyat sistemi tərəfindən idarə olunan aydın şəkildə müəyyən edilmiş həyat dövrü var.
| Metod | Təsvir | Nə etməli |
|---|---|---|
| onCreate | Activity yaradıldıqda bir dəfə çağırılır | UI başlatma, findViewById, ViewModel qurulumu |
| onStart | Activity görünən olur | Animasiyaları başlat, BroadCastReceiver qeydiyyatdan keçir |
| onResume | Activity giriş fokusunu alır | Kamera, sensorlar, animasiyaları başlat |
| onPause | Activity fokusunu itirir (qismən görünür) | Qaralamaları yadda saxla, animasiyaları dayandır |
| onStop | Activity görünmür | Resursları sərbəst burax, yeniləmələri dayandır |
| onDestroy | Activity məhv edilir | Bütün istinadları təmizlə, LiveData-dan abunəni ləğv et |
| onRestart | onStop-dan sonra onStart-dan əvvəl çağırılır | Yenidən başlatma |
Vacib: onSaveInstanceState müvəqqəti vəziyyəti yadda saxlamaq üçün onStop-dan əvvəl çağırılır. Bərpa onCreate-də Bundle savedInstanceState və ya ViewModel-də SavedStateHandle vasitəsilə baş verir. Həyat dövrü düzgün idarə edilmədikdə, ekran fırlananda tətbiq bütün yadda saxlanılmamış məlumatları itirəcək.
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-nin həyat dövrü dəyişməz qalır, lakin Compose əlavə alətlər təqdim edir: LifecycleOwner vasitəsilə Həyat dövründən xəbərdar kompozisiya, məhv olma zamanı avtomatik resurs təmizləmə üçün LifecycleEventEffect və DisposableEffect effektləri.
Android-də Fragment Activity-nin daxilində yaşayır və öz həyat dövrünə malikdir, bu qismən Activity ilə üst-üstə düşür, lakin yeni metodlar əlavə edir. Fragment-lər Activity-ni məhv etmədən əlavə edilə, dəyişdirilə, silinə bilər, bu da onları daha çevik, lakin daha mürəkkəb edir.
Fragment Lifecycle-in əsas metodları: onAttach — Fragment Activity-yə bağlandı (ilk çağırış); onCreate — məlumatların başlanması; onCreateView — View yaradılması; onViewCreated — View yaradıldı, UI konfiqurasiya edilə bilər; onStart — Fragment görünür; onResume — Fragment fokusda; onPause — Fragment fokusunu itirir; onStop — Fragment görünmür; onDestroyView — View məhv edilir; onDestroy — Fragment məhv edilir; onDetach — Fragment Activity-dən ayrılır.
Activity-dən əsas fərq: onCreateView və onDestroyView bir neçə dəfə çağırıla bilər (məsələn, TabLayout dəyişdirilərkən), onCreate isə bir dəfə çağırılır. Müvafiq olaraq, View-in başlanması onCreateView-də deyil, onViewCreated-da edilməlidir. View ilə əlaqəli resurslar (məsələn, RecyclerView adapterləri) onDestroyView-da təmizlənməlidir.
UIViewController iOS-da ekranları idarə etmək üçün əsas sinifdir. Onun həyat dövrü UIKit-in avtomatik çağırdığı metodlar ardıcıllığından ibarətdir. Bu dövrü başa düşmək düzgün UI başlanması, məlumat idarəetməsi və yaddaş idarəsi üçün kritik əhəmiyyət daşıyır.
| Metod | Nə vaxt çağırılır | Adi istifadə |
|---|---|---|
| loadView | View Controller öz View iyerarxiyasını yüklədikdə | Storyboard olmadan xüsusi başlatma |
| viewDidLoad | View yaddaşa yükləndikdən sonra (bir dəfə) | UI qurulumu, ilkin məlumatların yüklənməsi |
| viewWillAppear | View ekranda görünməzdən əvvəl | Məlumatları yenilə, bildirişlərə abunə ol |
| viewDidAppear | View ekranda göründükdən sonra | Animasiyaları başlat, izləmə animasiyalarını başlat |
| viewWillDisappear | View ekrandan yox olmazdan əvvəl | Vəziyyəti yadda saxla, bildiriş abunəliyini ləğv et |
| viewDidDisappear | View ekrandan yox olduqdan sonra | Animasiyaları dayandır, resursları sərbəst burax |
| dealloc | View Controller məhv edildikdə | Bütün resursları sərbəst burax |
Vacib: viewDidLoad View Controller-in ömrü boyu yalnız bir dəfə çağırılır. Hər görünmədə məlumatları yeniləmək üçün viewWillAppear-dan istifadə edin. Əgər viewWillAppear-da NotificationCenter-ə abunə olursunuzsa, yaddaş sızmasının qarşısını almaq üçün viewDidDisappear-da abunəliyi ləğv etdiyinizə əmin olun.
SwiftUI View strukturları vasitəsilə View-lərin həyat dövrünü idarə edir. Geri çağırış metodları əvəzinə SwiftUI onAppear və onDisappear modifier-lərindən istifadə edir. Qlobal tətbiq vəziyyətləri üçün App və Scene protokolları vasitəsilə App Lifecycle istifadə olunur. SwiftUI vəziyyətə əsasən View-lərin yaradılmasını və məhv edilməsini avtomatik idarə edir, bu da inkişafı sadələşdirir, lakin View-in kimliyi və ömrünü başa düşməyi tələb edir.
struct ContentView: View {
var body: some View {
Text("Hello")
.onAppear {
print("View появилась")
}
.onDisappear {
print("View исчезла")
}
}
}
LifecycleOwner Android Architecture Components-dan bir interfeysdir ki, həyat dövrü olan bir obyekti (Activity, Fragment) qeyd edir. LifecycleObserver bir obyektin LifecycleOwner hadisələrinə abunə olmasına imkan verən interfeysdir. Birlikdə onlar müasir Android inkişafında reaktiv həyat dövrü idarəetməsinin əsasını təşkil edirlər.
onStart/onStop-da açıq şəkildə metodları çağırmaq əvəzinə, DefaultLifecycleObserver-dan (köhnəlmiş LifecycleObserver və @OnLifecycleEvent annotasiyalarının əvəzi) istifadə etmək tövsiyə olunur. Bu, Activity və ya Fragment-ə birbaşa istinadları olmadan həyat dövrünə reaksiya verməli olan ViewModel və digər komponentlər üçün Google tərəfindən təbliğ edilən yanaşmadır.
class MyObserver : DefaultLifecycleObserver {
override fun onStart(owner: LifecycleOwner) {
// Подписка на обновления
}
override fun onStop(owner: LifecycleOwner) {
// Отписка
}
}
IT Sectr-da biz bütün Android layihələrində LifecycleOwner istifadə edirik. ViewModel viewModelScope və lifecycleScope vasitəsilə Activity-nin LifecycleOwner-ına abunə olur və Activity məhv edildikdə korutinlərin avtomatik ləğv edilməsini təmin edir. Bu, yaddaş sızmalarının qarşısını alır və kodu daha təmiz və təhlükəsiz edir.
Tez-tez verilən suallar
Activity altı vəziyyətdən keçir: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).
Ardıcıllıq: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad bir dəfə çağırılır.
LifecycleOwner Activity və ya Fragment-in həyat dövrünə sahib olan Android Architecture Components komponentidir. LifecycleObserver vasitəsilə hadisələrə abunə olmağa imkan verir.
iOS tətbiqi beş vəziyyətdən keçir: Not Running, Inactive, Active, Background, Suspended. Keçidlər UIApplicationDelegate vasitəsilə idarə olunur.
Saved State ekran fırlanması və ya prosesin yenidən yaradılması zamanı Activity/Fragment vəziyyətini qoruyan Android mexanizmidir. onSaveInstanceState və SavedStateHandle istifadə edir.
Xülasə
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.