SORU
26 NİSAN 2011, Salı


İletişim atma "pencereyi simge boş bir uygulama değil eklemenin” getApplication() ile içerik olarak

Benim Etkinlik parametre olarak bir Bağlam gerektiren bir AlertDialog yaratmaya çalışıyor. Bu eğer kullanırsam beklendiği gibi çalışır:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

Ancak, ben kullanarak leery "bu Aktivite ve hatta bir şey sırasında yıkılan yeniden" bir bağlam olarak bellek sızıntısı potansiyeli nedeniyle ekran döndürme gibi basit. related post on the Android developer's blog: bir

İçerik ile ilgili bellek sızıntıları önlemek için iki kolay yolu vardır. En belirgin biri kendi kapsamı dışında kapsamında kaçmasını önlemek için. Yukarıdaki örnekte, ama iç sınıflar statik bir referans ve dış sınıfına örtülü bir referans olması durumunda aynı derecede tehlikeli olabileceğini gösterdi. İkinci çözüm Uygulama kapsamında kullanmaktır. Bu bağlamda uygulama hayatta olduğu sürece yaşayacak ve faaliyetleri yaşam döngüsü bağlı değildir. Eğer uzun ömürlü bir bağlam nesneleri tutmak planlıyorsanız, uygulama nesnesi unutmayın. Kolayca İçerik çağırarak elde edebilirsiniz.() getApplicationContext veya Aktivite.() getApplication.

Ama AlertDialog için ne getApplicationContext() veya getApplication() özel durum atar gibi bir Bağlam olarak kabul edilebilir, "pencere eklenemiyor — token boş bir uygulama değildir.” başvurular başına: , *, 3, *25 vb.

Bu gerçekten "" kullanım Etkinliği, resmi olarak tavsiye olduğumuz için.bir hata olarak() getApplication ve henüz reklamı gibi işlev değil mi?

Jim

CEVAP
29 AĞUSTOS 2011, PAZARTESİ


getApplicationContext(), ActivityName.this yerine.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ayite Atiwoto (superjiffrey)

    Ayite Atiwot

    29 EYLÜL 2010
  • EEVblog2

    EEVblog2

    2 HAZİRAN 2014
  • The Dubstep FX

    The Dubstep

    5 Mart 2011