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əsi | onPause → onStop (geri qayıdanda: onRestart → onStart → onResume) |
| Üstünə yarımşəffaf dialog-activity | Yalnız onPause (görünür qalır) |
| Rotation | onPause → 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; sonraSavedStateHandleilə 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
- Activity lifecyclerəsmideveloper.android.com
- UI state-in saxlanmasırəsmideveloper.android.com
- Configuration change-lərin idarəsirəsmideveloper.android.com