Context’in Türkçe manası “bağlam” demektir. O anki sistemde uygulamanın durumu hakkında bilgi sağlayan soyut bir sınıftır. Uygulamadaki kaynaklara referans olarak her yerden erişmemizi sağlar. Kaynak ve servislere erişim sağlarken, ve uygulama düzeyinde işlemler yaparken kullanılır. Mesela bir Toast mesajı, yazdırılırken hangi Activity’de gözükeceğini Context yardımıyla anlar. Yanlış kullanımı memory leak’e sebep olur o yüzden StrictMode ile kontrol edilmesi önerilir. Farklı türde Android Context tipleri vardır onlardan bahsedeyim.
Application Context, getApplicationContext() metoduyla uygulamanın herhangi biryerinden uygulama Context’ini alınır, singleton’dır, uygulamayla aynı yaşam süresine sahiptir.
ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
Activity Context, ActivityName.this yoluyla çağrılır ve Activity ile aynı yaşam süresine sahiptir. Daha çok o Activity içerisindeki objelerde kullanılır. Service’ler de aynı mantıktadır. Activity’nin kendisi Context’i implement eder.
Context | — ContextWrapper |— — Application | — —— ContextThemeWrapper |— — — — Activity
ContentProvider, herhangi bir Context barındırmaz lakin sahip olunan getContext() metodu ile uygulama Context’i alınabilir.
getApplicationContext().getContentResolver().query(uri, ...);
BroadcastReceiver, kendisi herhangi bir Context barındırmaz. onReceive() metoduyla Context alabilir.
Uygulama | Activity | Service | Content Provider | BroadcastReceiver | |
Diyalog gösterme | Hayır | Evet | Hayır | Hayır | Hayır |
Activity başlatma | Hayır | Evet | Hayır | Hayır | Hayır |
Layout inflation | Hayır | Evet | Hayır | Hayır | Hayır |
Service başlatma | Evet | Evet | Evet | Evet | Evet |
Service binding | Evet | Evet | Evet | Evet | Hayır |
Broadcast gönderme | Evet | Evet | Evet | Evet | Evet |
BroadcastReceiver kaydetme | Evet | Evet | Evet | Evet | Hayır |
Kaynak yükleme | Evet | Evet | Evet | Evet | Evet |