Çok ilginç bir soru. Bence bu çoğunlukla anlamsal bir anlam ve tarihsel nedenlerden de kaynaklanıyor olabilir.
Mevcut Android Etkinlik ve Hizmet uygulamalarında getApplication()
ve getApplicationContext()
aynı nesneyi döndürmesine rağmen, bunun her zaman böyle olacağının garantisi yoktur (örneğin, belirli bir satıcı uygulamasında).
Bu nedenle, Manifest'te kaydettiğiniz Application sınıfını istiyorsanız, onu asla çağırmamalı getApplicationContext()
ve uygulamanıza yayınlamamalısınız, çünkü uygulama örneği olmayabilir (test çerçevesi ile açıkça deneyimlediğiniz).
Neden getApplicationContext()
ilk etapta var?
getApplication()
getApplicationContext()
Context sınıfında bildirilirken , yalnızca Activity sınıfında ve Service sınıfında kullanılabilir.
Bu aslında bir şey anlamına gelir: bir bağlamda olmayan ancak onReceive yönteminde bir bağlam verilen bir yayın alıcısına kod yazarken, yalnızca arayabilirsiniz getApplicationContext()
. Bu ayrıca bir BroadcastReceiver'da uygulamanıza erişiminizin garanti edilmediği anlamına gelir.
Android koduna bakarken, eklendiğinde bir etkinliğin temel bir bağlam ve bir uygulama aldığını ve bunların farklı parametreler olduğunu görürsünüz. getApplicationContext()
delege çağırıyor baseContext.getApplicationContext()
.
Bir şey daha var: Belgeler çoğu durumda bunun Alt Sınıfı uygulaması gerekmemesi gerektiğini söylüyor:
Normalde alt sınıfa gerek yoktur Application
. Çoğu durumda, statik tek tonlar aynı işlevselliği daha modüler bir şekilde sağlayabilir. Eğer singleton'unuz global bir bağlama ihtiyaç duyarsa (örneğin yayın alıcılarını kaydetmek için), onu alma fonksiyonuna , singletonu ilk oluştururken Context
dahili olarak kullanılan bir fonksiyon verilebilir
Context.getApplicationContext()
.
Bunun kesin ve kesin bir cevap olmadığını biliyorum, ama yine de bu sorunuza cevap veriyor mu?
Application
uygulamanızda nesneyi.