Android Context’i Anlamak

Context, Android uygulama geliştirmenin önemli yapı taşları arasında yer almaktadır. Context ile uygulamanın bağlamı ve diğer componentlerle iletişimi sağlanabilir.

Android’de kullanılan birden fazla Context vardır. Bu yapının nasıl kullanıldığı ve nerede kullanılacağı çoğu geliştirici tarafından tam olarak bilinmez ve bu durum memory leak gibi bazı problemlere yol açabilir.

Context Nedir?

Context, uygulama ortamı hakkında genel bilgilere ulaşan, diğer componentlerle iletişim sağlayabilen bir arayüzdür.

Context 3 farklı şekilde kullanılabilir.

  • Yeni bir aktivite başlatmak
  • Kaynakları yüklemek
  • Layoutları infilate etmek

Context Tipleri

Context, Android componentinin nerede kullanıldığına göre değişen bir yapıya sahiptir. UI ile ilişkili olabilir, kısa ve uzun yaşam döngüsüne sahip olabilir. Şimdi bu context tiplerini inceleyelim.

Application

Application classı Contexti içerir. Buradaki context singleton olarak tanımlanmıştır yani her çağırdığınızda aynı instance verilecektir. Application Context tüm uygulamanın lifecycle na bağlıdır ve uzun bir yaşam döngüsüne sahiptir. Bir diğer önemli detay ise bu contextin UI ile ilişkili olmadığıdır yani bu context theme hakkında bir bilgi içermez. Bundan dolayı bu context ile XML inflate yapamazsınız.

Application Context’i getApplicationContext() metodu ile çağırabilirsiniz.

Kullanacağınız object Activity veya Service ötesinde ise Application Context kullanın. Diğer durumda memory leak ile karşılaşmanız kaçınılmaz olacaktır. Üstte bahsettiğim gibi bu context UI ile ilişkili olmadığından UI işlemlerinde bu contexti kullanmaktan kaçının.

Bununla alakalı bir örneği inceleyelim.

Gördüğünüz gibi Room DB ile tüm uygulamada etkin olacak bir instance oluşturduğumuz için burada Application Context kullandık.

Activity

Activity’ler de içerisinde Context barındırır. Bu context Activity lifecycle bağımlıdır. Bu yüzden sadece Activity içerisinde kullanılmalıdır. Bu Context, ContextThemeWrapper classını kullanır. Yani Context + Theme’dir. Bununla beraber XML inflate işlemi bu context ile yapılabilir.

Activity ya da Fragment içerisinde bu contexte getContext() ya da this ile ulaşılabilir.

Activity Context, layout inflate, dialog show, get resource ve bir başka activity başlatmak için kullanılabilir.

Service

Service’lerde context barındırır. Ancak bu context UI ile ilişkili değildir ve Service lifecycle bağlıdır.

BroadCastReceiver

BroadCastReceiver bir context içermez ama gelen her event için onReceive() metodu içindeki contexti alır. Yine bu context UI ile ilişkili değildir ve kısa bir yaşam döngüsüne sahiptir.

ContentProvider

ContextProvider da bir context içermez Android frameworku oluşturulduğunda ContentProvider için bir app context sağlar. Bu nedenle kullanımı Application Context ile aynıdır.

Evet artık Context ile alakalı bilgilere sahipsiniz ve nerede nasıl kullanılacağını biliyorsunuz. Tek kaçınmanız gereken nokta memory leak ler.

https://developer.android.com/reference/android/content/Context

https://developer.android.com/reference/android/view/ContextThemeWrapper

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.