Android Service ve Broadcast Receiver Nedir?
Teknoloji alanındaki yetenek açığını kapatmak, yazılım alanında gençlerin geleceklerine değer katmak için 3 yıl önce yolculuğumuza başladık. Yüzlerce gencin katılımıyla büyürken, onların ürettiklerinden ilham aldık. #KodluyoruzLab ile Kodluyoruz Akademi Mezunlar Kulübü’nden gençler yolculuğumuz boyunca ürettiklerini daha fazla gence ilham olmak için paylaşıyor. Şimdi onları dinleme zamanı…
2019 İstanbul Kotlin-Android bootcamp mezunumuz Esra Eken’in yazısı sizlerle. Keyifli okumalar.
Merhabalar! Bu yazım, başlıktaki sorunun cevabına yönelik olacak. İsterseniz hemen başlayalım!
Android’de 4 adet context vardır:
- Activity
- Broadcast Receiver
- Service
- Content Provider
Android alanında yeni çalışmaya başlayanların, Activity’leri duyduğunu ve kullandığını biliyorum. Fakat Broadcast Receiver ve Service kafanızda soru işareti oluşturduysa, doğru yazıdasınız ve okumaya devam edin…
Broadcast Receiver (Yayın Alıcı)
Broadcast Receiver’lar, Android işletim sisteminde belli fonksiyonlar için bütün uygulamalara yayın yapan yapılardır (örneğin ‘Mesaj geldi, Arama başlatıldı, Lokasyon değişti’ vb.). Yapılan bütün yayınları dinleyebilir ve arka planda çalışan fakat uygulama simgesi olmayan aplikasyonlar yapabilir. Basit bir senaryo ile Broadcast Receiver’ları açıklayalım: WhatsApp’ta bir kişiyle görüntülü konuşuyorsunuz ve sohbet uzadıkça uzuyor. Sonra bir de bakıyorsunuz ki üstten “Karşınızdaki kişinin pil seviyesi azaldı” diye bir bildirim geliyor. İşte tam bu noktada bu görevi üstlenen, Broadcast Receiver’dir. Karşınızdaki kişinin pil seviyesinin azaldığını fark edip bunu uygulamada size bir uyarı niteliğinde öne sürer. Ya da dışarı çıktınız, yürüyorsunuz ve bir anda telefonunuza bir kafeden indirim bildirimi geliyor. Burada da, uygulama, eğer izin verdiyseniz, lokasyon bilginizi alıyor ve bu şekilde kullanabiliyor. Bunu yapmasını sağlayan yapılara da Broadcast Receiver deniliyor.
Service (Servis)
Arayüzü olmayan, arka planda çalışan ve çalışacak işlemleri yöneten yapılardır. Arayüzleri olmadığı için kullanıcı ile herhangi bir bağlantıları olmaz. Android işletim sistemi, service class’lara, activity’lere göre öncelik tanır. Cihazın RAM sıkıntısı olduğu durumlarda önce activity’leri kapatır sonra servisleri otomatik kapatmaya başlar. Eğer RAM sıkıntısı ortadan kalkarsa kapattığı servisleri tekrardan açar. Uygulamayı kapattığınızda bile servisler çalışmaya devam edebilir. Kullanım senaryolarına bakacak olursak, uygulama açıkken çok uzun sürecek bir post işlemi ya da veritabanı işlemi arka planda kullanıcıyı bekletmeden yapılabilir. Diğer bir senaryo ise, örneğin bir müzik uygulamasında siz uygulamadan çıktığınızda arka planda müzik çalmaya devam edebilir ve siz de bir yandan müzik dinlerken bir yandan telefon ile ilgili diğer işlerinizi yapabilirsiniz.
İki adet servis vardır:
- Foreground Service
- Background Service
Foreground Service, yukarıdaki verdiğimiz müzik uygulaması örneğinde olduğu gibidir: Aslında bir arayüz vardır. Orada şarkının ismi, albüm kapağı gibi bilgileri görürüz, ama bu uygulamanın arayüzü değildir. Bir örnek daha vermek gerekirse Facebook Messenger uygulamasını açıp arka planda başka bir uygulamaya girdiğinizde Messenger’dan size mesaj gelir ve bir baloncuk karşınıza çıkar. İşte bu da bir Foreground Service’dir. Background Service’ler de yine yukarıda bahsettiğim gibi bir post veya db işlemleri sırasında arka planda işleyen ve kullanıcıyı etkilemeyen servislerdir.
Service yazarken 2 class extend edilebilir:
- Intent Service Class
- Service Class
Intent Service class: Main thread üzerinde değil de başka thread üzerinde işlem yapmamızı sağlar. İndirme işlemleri, server’a request atmak, db işlemleri gibi işlemlerde intent service kullanmalıyız.
Service class: Main thread’in üzerinde çalışır. Bu yüzden, bu servisi kullanırken UI’ı kilitleyen uzun işlemler yapacaksak kullanmamalıyız. Aksi takdirde ANR hatası alırız.
Evet arkadaşlar, bu yazım burada sonlanıyor. Umarım faydam dokunmuştur. Diğer yazılarımda görüşmek üzere. Öneri ve görüşleriniz benim için çok önemli, düzeltmemi düşündüğünüz bir kısım var ise bana Linkedin üzerinden ulaşabilirsiniz.
Hoşça kalın!