Etkinliğim, parametre olarak bir Bağlam gerektiren bir AlertDialog oluşturmaya çalışıyor. Ben kullanırsanız bu beklendiği gibi çalışır:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Ancak, bir ekran döndürme gibi basit bir şey sırasında bile Etkinlik yok edildiğinde ve yeniden oluşturulduğunda bellek sızıntısı potansiyeli nedeniyle "bunu" bir bağlam olarak kullanmaktan keyif duyuyorum. Android geliştiricisinin blogundaki ilgili bir gönderiden :
Bağlama bağlı bellek sızıntılarını önlemenin iki kolay yolu vardır. En bariz olanı, bağlamın kendi kapsamının dışına çıkmasından kaçınmaktır. Yukarıdaki örnek statik bir referansı gösterdi ancak iç sınıflar ve bunların dış sınıfa dolaylı referansları aynı derecede tehlikeli olabilir. İkinci çözüm Uygulama bağlamını kullanmaktır. Bu bağlam, uygulamanız canlı olduğu ve etkinliklerin yaşam döngüsüne bağlı olmadığı sürece yaşayacaktır. Bağlama ihtiyacı olan uzun ömürlü nesneleri tutmayı planlıyorsanız, uygulama nesnesini unutmayın. Context.getApplicationContext () veya Activity.getApplication () öğesini çağırarak kolayca edinebilirsiniz.
Ama için AlertDialog()
ne getApplicationContext()
ya getApplication()
da istisna atar gibi bir Bağlamında olarak kabul edilebilir:
"Pencere eklenemedi - simge null bir uygulama için değil"
referans başına: 1 , 2 , 3 vb.
Yani, resmen kullanmamız önerildiğinden Activity.getApplication()
ve reklamı yapılmadığı için bu gerçekten bir "böcek" olarak düşünülmeli mi?
Jim