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

  • Electro Posé

    Electro Pos

    21 ŞUBAT 2013
  • natescamp

    natescamp

    30 NİSAN 2009
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012