Sparround

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ətHansı Context?
Dialog və ya layout inflateActivity context (theme lazımdır)
Room/Retrofit singleton-un yaradılmasıApplication context
Toast/resurs oxumaqHər ikisi işləyir
Static sahədə saxlamaqYalnı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. taskAffinityFLAG_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 activities ilə 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