Sparround

Activity lifecycle və configuration change

Activity 6 əsas callback-dən keçir:

  • onCreate — bir dəfə: UI qurulur, state bərpa olunur.
  • onStart — ekran görünür olur.
  • onResume — istifadəçi ilə interaksiya başlayır (ön planda).
  • onPause — fokus itir (üstünə dialog/başqa activity gəlir). Qısa olmalıdır.
  • onStop — tamamilə görünməz. Resurslar burada azad edilir.
  • onDestroy — activity məhv edilir: ya finish(), ya configuration change, ya sistem prosesi öldürür.

Configuration change (rotation, dil, dark mode) defolt davranışda activity-ni məhv edib yenidən yaradır. Data itkisinə qarşı 3 mexanizm: ViewModel (obyektlər, config change-i sağ keçir), onSaveInstanceState (kiçik primitive-lər, prosesin ölümünü də sağ keçir), SavedStateHandle (ikisinin birləşməsi, ViewModel içində).

SsenariÇağırılan callback-lər
İlk açılışonCreate → onStart → onResume
Home düyməsionPause → onStop (geri qayıdanda: onRestart → onStart → onResume)
Üstünə yarımşəffaf dialog-activityYalnız onPause (görünür qalır)
RotationonPause → onStop → onDestroy → onCreate → onStart → onResume
Geri düyməsi (finish)onPause → onStop → onDestroy

Ən çox verilən tələ-sual: "onSaveInstanceState nə vaxt çağırılır və ViewModel-dən fərqi nədir?" ViewModel config change-i sağ keçir, amma prosesin ölümünü keçmir; onSaveInstanceState (və SavedStateHandle) hər ikisini keçir, amma yalnız kiçik, serializasiya olunan data üçündür. Böyük data → ViewModel/repository, kritik UI state (yazılmış mətn, seçilmiş tab) → SavedStateHandle.

🛠 Tapşırıq

Bir Activity-nin bütün lifecycle callback-lərinə Log.d əlavə et, sonra logcat-a baxaraq bu ssenariləri keç:

  • Açılış, Home düyməsi, geri qayıtma, rotation, geri düyməsi.
  • Developer options → "Don't keep activities"-i aç və prosesin ölümünü təqlid et.
  • Bir EditText-ə mətn yaz və rotation-dan sonra itib-itmədiyini yoxla; sonra SavedStateHandle ilə saxla.

Bitdi sayılır: hər ssenarinin callback ardıcıllığını kağıza yazıb logcat ilə tutuşdurmusansa.

📚 Mənbələr və sənədlər