Örnek sorular
Kt Android Memory Context LeaksZorluk 1
Android'de Activity context ile Application context arasındaki temel pratik fark nedir?
- aFark yoktur; her ikisi de her durumda birbirinin yerine kullanılabilir. İkisi de altta aynı
Context temel sınıfının düz birer örneğidir. - bApplication context temalı layout inflate edebilir ama Activity context edemez.
- cActivity context sadece Fragment içinde kullanılabilir, Activity içinde asla kullanılamaz.
- dActivity context o Activity'nin lifecycle'ına bağlıdır; Application context ise süreç yaşadığı sürece yaşar.✓
Açıklama:Activity context, kendi Activity'siyle birlikte yok edilir; onu Activity'nin ömründen daha uzun tutmak klasik bir leak kaynağıdır.
Kt Android Memory Context LeaksZorluk 1
Bir singleton, ileride dialog gösterebilmek için init()'e geçirilen bir Activity referansını saklıyor. Risk nedir?
- aRisk yoktur; singleton'lar her zaman hemen garbage collect edilir. Elle yönetilen bir ömrü olmayan her nesne, scope'u biter bitmez geri kazanılır.
- bSingleton, Activity'den daha uzun yaşar; bu yüzden onu (ve referans verdiği her şeyi) yok edilmesi gerektikten sonra da canlı tutar.✓
- cActivity derlenemez çünkü singleton'lar parametre kabul edemez.
- dDialog, referanstan bağımsız olarak her zaman anında çöker.
Açıklama:Bir singleton'ın ömrü tek bir Activity'ye değil sürece bağlıdır; içine Activity referansı saklamak onun garbage collect edilmesini engeller.
Kt Android Memory Context LeaksZorluk 1
Kotlin'de non-static (inner) bir class, sarmalayan (enclosing) instance'ına neden örtük bir referans tutar?
- aÇünkü bir inner class instance'ı belirli bir dış instance'a bağlıdır ve onun üyelerine ihtiyaç duyar.✓
- bÇünkü Kotlin her class'ın dosyadaki her başka class'a referans tutmasını zorunlu kılar.
- cÇünkü inner class'lar her zaman tüm uygulama genelinde paylaşılan singleton'lardır. Bu, Kotlin derleyicisi tarafından her nested class bildirimi için zorunlu kılınır.
- dÇünkü derleyici bu referansı sadece debug build'lerde loglama için ekler.
Açıklama:Dış-instance erişimi gereken sıradan bir nested class, o dış instance'a örtük referans tutar; inner nesnelerin sarmalayan Activity'yi leak etmesinin sebebi budur.
Kt Android Memory Context LeaksZorluk 2
Bir Activity, bir buton üzerine anonim bir View.OnClickListener kaydediyor. Bu anonim listener örtük olarak neye referans tutar?
- aHiçbir şeye; anonim nesneler asla dış referans tutmaz.
- bSadece buton view'ına, Activity'nin kendisine asla.
- cAndroid framework'ünün global ClassLoader'ına. Uygulamadaki her class'ı yükleyen tek paylaşılan bir instance'tır.
- dSarmalayan Activity instance'ına, çünkü anonim class kendi sarmalayan scope'unu yakalar.✓
Açıklama:Bir Activity metodu içinde oluşturulan anonim bir inner class, isimli bir inner class gibi, sarmalayan Activity instance'ını örtük olarak yakalar.
Kt Android Memory Context LeaksZorluk 1
Bellek sızıntılarını önleme bağlamında WeakReference'ın genel amacı nedir?
- aBir nesnenin hiçbir koşulda garbage collect edilmemesini garanti etmek.
- bHerhangi bir nesneyi otomatik olarak singleton'a dönüştürmek. Bu dönüşüm, referans ilk okunduğunda şeffafça gerçekleşir.
- cBir nesneye, o nesnenin garbage collect edilmesini engellemeden erişebilmek.✓
- dReferans verilen nesnenin anında garbage collect edilmesini zorlamak.
Açıklama:Bir WeakReference, kodun bir nesneye (hâlâ varsa) erişmesine izin verir ama güçlü referans sayılmaz — daha kısa ömürlü bir şeye (bir Activity gibi) daha uzun ömürlü bir yerden referans tutarken faydalıdır.
Kt Android Memory Context LeaksZorluk 2
Bir Activity'den Handler, postDelayed(runnable, 60_000) ile bir Runnable gönderiyor ve Activity 2 saniye sonra yok ediliyor. Runnable non-static bir inner class ise ne olur?
- aActivity yok edilir edilmez Runnable otomatik olarak iptal edilir.
- bActivity yok edildiğinde uygulama anında çöker. Runtime, yok edilmiş bir Activity'yi anında ölümcül bir hata kaynağı olarak görür.
- cHandler bekleyen mesajı hemen sessizce yok sayar.
- dHandler'ın kuyruğundaki bekleyen mesaj, Runnable'ı — ve yok edilmiş Activity'yi — mesaj işlenene kadar, yaklaşık bir dakika, canlı tutar.✓
Açıklama:Handler'ın kuyruğundaki bekleyen bir mesaj kendi Runnable'ına referans tutar; non-static inner bir Runnable, mesaj işlenene ya da kaldırılana kadar Activity'yi canlı tutar.