SORU
16 ŞUBAT 2011, ÇARŞAMBA


() getApplication vs getApplicationContext()

Bu tatmin edici bir cevap bulamadım, işte başlıyoruz: Activity/Service.getApplication() Context.getApplicationContext() olayı nedir?

Bizim uygulamada, aynı nesne döndürür. ActivityTestCase ancak, uygulama alay getApplication() alay ile geri gelecek, ama getApplicationContext hala farklı bir bağlam örneği (bir Android ile enjekte) dönecektir. Bu bir hata mı? Bilerek mi?

Hatta ilk başta farkı anlayamadım. Her iki aramayı da farklı nesneler ile geri gelebilir nerede bir test paketi dışında bir durum var mı? Ne zaman ve neden? Ayrıca, neden getApplication Activity Service ama Context değil tanımlanır? Orada her zaman geçerli bir uygulama örneği mevcut olmamalıher yerde?

CEVAP
20 Temmuz 2011, ÇARŞAMBA


Çok ilginç bir soru. Özellikle semantik bir anlam da, tarihi nedenlerden dolayı olabilir bence.

Ancak mevcut Android Aktivite ve Hizmet uygulamaları, getApplication() getApplicationContext() dönüş aynı nesne, garantisi yoktur, bu her zaman olması durumunda (örneğin, belirli bir satıcı uygulama).

Eğer listede kayıtlı Uygulama sınıfı istiyorsanız, bu yüzdenaslagetApplicationContext() ve uygulama örneği olmayabilir, çünkü sizin uygulamaya koyun, belli ki test çerçevesi ile yaşanan () arayın.

Neden getApplicationContext() ilk etapta var mı ?

getApplication() getApplicationContext() Bağlam sınıf içinde bildirilmiş ise sadece Faaliyet sınıfı ve Hizmet sınıfı.

Bir bağlam değil ama onReceive metodu bir bağlam verilen yayın alıcısı, kod yazarken, sadece getApplicationContext() diyebilirsin. aslında bir şey anlamına gelir : Ayrıca bir BroadcastReceiver uygulama erişimi için garanti olmadığı anlamına gelir.

Android kod baktığımızda, bağlı olduğunda, bir aktivitenin temel bir bağlam ve bir uygulama alır, ve bu farklı parametreleri vardır. getApplicationContext() baseContext.getApplicationContext() için arama delegeler.

Bir şey daha : bu belgelere diyor çoğu zaman, Uygulama sınıfı gerek yok:

Normalde Application alt gerek yok. Çoğu durumda, statik tekiz aynı işlevi daha modüler bir yer sağlayabilir yol. Senin tek bir küresel bağlam ihtiyaçları (örneğin kayıt için verilebilir almak için alıcılar yayın), bir işlev Dahili Context.getApplicationContext() kullanan Context ilk singleton yapım.

Bu tam ve kesin bir cevap değil biliyorum, ama yine de, bu sorunun cevabı değil mi?

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CMTelly

    CMTelly

    2 Mayıs 2007
  • Commander Chalkboard

    Commander Ch

    20 Ocak 2014
  • joshsnice

    joshsnice

    28 Kasım 2006