Context, Task, Back Stack və launch mode-lar
Context — tətbiqin mühitinə giriş qapısıdır: resurslar, sistem servisləri, fayl sistemi, komponent başlatma. İki əsas növ:
- Application context — tətbiq boyu yaşayır. Singleton-lara, uzunömürlü obyektlərə verilməlidir.
- Activity context — activity ilə ölür. UI işləri (dialog, inflate, theme) üçün lazımdır.
Qızıl qayda: obyekt context-dən uzun yaşayacaqsa, ona activity context vermə — memory leak.
Task — istifadəçinin bir "iş axını" üçün activity yığınıdır (back stack). LIFO işləyir: yeni activity üstə gəlir, geri düyməsi üstdəkini çıxarır.
Launch mode-lar (manifest və ya intent flag ilə):
- standard — hər dəfə yeni instansiya.
- singleTop — üstdədirsə yenisi yaranmır, onNewIntent çağırılır (notification-dan açılan ekranlar).
- singleTask — task-da tək instansiya; varsa, üstündəkilər silinir və onNewIntent gəlir (ana ekran).
- singleInstance — ayrıca task-da tam tək (nadir: zəng ekranı).
| Vəziyyət | Hansı Context? |
|---|---|
| Dialog və ya layout inflate | Activity context (theme lazımdır) |
| Room/Retrofit singleton-un yaradılması | Application context |
| Toast/resurs oxumaq | Hər ikisi işləyir |
| Static sahədə saxlamaq | Yalnız Application (activity leak edər) |
Bank tətbiqində real ssenari: push notification-dan tranzaksiya detalına keçid. Detal ekranı singleTop + onNewIntent ilə qurulmasa, hər push yeni instansiya yığır və geri düyməsi eyni ekranı təkrar-təkrar göstərir. taskAffinity və FLAG_ACTIVITY_NEW_TASK kombinasiyaları da task hijacking hücumları kontekstində soruşula bilər — StrandHogg zəifliyinin adını çəkmək güclü siqnaldır.
🛠 Tapşırıq
Task və context məşqi:
- Bir singleton obyektə activity context ver, activity-ni bağla və LeakCanary-nin trace-ini oxu; sonra
applicationContext-ə keç. - Bir activity-yə
launchMode="singleTop"ver, notification-dan (və ya təkrar intent-lə) aç —onNewIntent-in çağırıldığını logla. adb shell dumpsys activity activitiesilə stack-ə bax.
Bitdi sayılır: stack A → B → C üzərində singleTask davranışını əvvəlcədən deyə bilirsənsə.
📚 Mənbələr və sənədlər
- Tasks və back stackrəsmideveloper.android.com
- Context — API referencerəsmideveloper.android.com