Mobil geliştirmeArşiv

Android servisleri

Herkese merhaba. Bu yazıda Android servislerinden söz edeceğiz. Servisler Android'in temel özelliklerinden biridir. Bir Android uygulaması geliştirirken servisler…

Android servisleri

Herkese merhaba. Bu yazıda Android servislerinden söz edeceğiz.

Servisler Android'in temel özelliklerinden biridir. Bir Android uygulaması geliştirirken servisler önemli bir rol oynar; bu yüzden servisleri elinizden geldiğince iyi öğrenmelisiniz. Bu yazıda servisleri ayrıntılı biçimde ele alacağız.

Servis, arka planda uzun süren işlemleri yürütebilen bir Android uygulama bileşenidir. Diğer Android bileşenleri gibi o da bir Android bileşenidir, ama arka planda çalışır.

Servislerin bir başka özelliği de kullanıcı arayüzünün olmamasıdır. Servislerin arayüze ihtiyacı yoktur, çünkü kullanıcıyla etkileşime girmezler. Diğer Android bileşenleri normalde kullanıcıyla etkileşim içindedir: e-posta girmek, parola girmek, bazı düğmelere tıklamak gibi. Servisler için ise bunlara gerek yoktur.

Bir servis başka Android bileşenleri tarafından başlatılabilir. Örneğin Android uygulamasında bir düğmeye tıkladığınızda bu düğme arka planda bir servisi başlatabilir.

Gerçek hayattan bir örnek vermek gerekirse dosya indirmeyi verebilirim. Uygulamada indir düğmesine tıkladığınızda bir servis dosyayı arka planda indirmeye başlar. Bazen bu dosya çok büyük olabilir ve indirmesi uzun sürebilir. Servis bu indirme görevini üstlenir ve arka planda yürütür. Bu arada siz uygulamada çalışmaya devam edebilirsiniz.

Bu indirme örneğinde:

Birincisi, indirme arka planda çalışır.

İkincisi, bu indirme servisinin kullanıcı arayüzü yoktur. Kullanıcıya bir indirme çubuğu ya da bildirim gösterebilir, ama bunlar aktivitenin ya da uygulamanın içinde yer almaz.

Üçüncüsü, bu servis bir indirme düğmesiyle başlatılmıştır. Yani servis bileşeni, başka bir bileşen olan düğme tarafından başlatılmıştır.

Başka bir servis örneği de verebiliriz. Müzik çalar uygulaması servislere örnek olabilir: müzik çalar, seçilen müziği arka planda çalmaya devam edebilir.

Bir başka örnek şöyle olabilir: bir uygulama internetten bir fotoğrafı arka planda indirebilir.

Ya da bir uygulama arka planda sunucuya bilgi gönderebilir.

Servislere çok daha fazla örnek verilebilir. Android uygulamalarında servislerin pek çok yaygın kullanımı vardır.

Android uygulamalarında üç farklı servis türü vardır.

Ön plan servisleri (foreground services)

Ön plan servislerinde kullanıcı süreci görebilir. Örneğin uygulamanız arka planda bir dosya indirecek olsun; bu bir ön plan servisidir. Ön plan servisinde kullanıcının bildirimleri görmesi gerekir. İndirme sürecini de görmesi gerekir. Ya da indirme bittiğinde kullanıcıya bilgi verilmesi gerekir.

Ayrıca kullanıcı uygulamayla etkileşimde olmasa bile servis arka planda çalışmaya devam etmelidir. Örneğin uygulamanız arka planda bir dosya indirmeye başlıyor. Bu dosya çok büyük, diyelim bir gigabayt olabilir. İndirme sürerken kullanıcı uygulamayı kullanmaya devam edebilir. Kullanıcı uygulamadan çıksa bile indirme sürmelidir.

Arka plan servisleri (background services)

Arka plan servislerinde kullanıcı süreci görmez. Uygulama kullanıcıya bildirim göstermez. Bazen kullanıcının servis sürecinden hiç haberi bile olmaz. Her şeyi arka planda yapabilirsiniz.

Örneğin bir uygulama geliştiriyorsunuz ve bu uygulama bazı fotoğrafları cihazın belleğinde saklıyor. Uygulama fotoğrafları cihazda saklarken arka planda sıkıştırabilir. Kullanıcının bu sıkıştırma işleminden haberdar olması gerekmez; uygulamanın arka planda ne yaptığını ya da fotoğrafları nasıl sıkıştırdığını bilmez. Kullanıcı yalnızca fotoğrafları çeker ve cihaza kaydeder. Siz bu fotoğrafları saklarken uygulamanın telefonda daha iyi çalışması için arka planda bir sıkıştırma servisi oluşturabilir, böylece fotoğrafların bellekte daha az yer kaplamasını sağlayabilirsiniz.

Fotoğrafları arka planda sıkıştırabilir, bunlara ihtiyaç duyduğunuzda yeniden açabilirsiniz. Bu serviste bazı işlemleri arka planda ve kullanıcının haberi olmadan yapıyorsunuz. Kullanıcı bu servisle etkileşime de girmiyor.

Bağlı servisler (bound services)

Bu servis türünde servis, kendisini çağıran bileşene bağlıdır ve onunla sürekli etkileşim hâlindedir. Kendisini çağıran bileşen durduğunda servis de durur; arka planda çalışmaya devam etmez. Literatürde bu ilişkiye istemci-sunucu (client-server) ilişkisi denir. Bu ilişkide sunucu servistir, istemci ise servisi başlatan bileşendir.

Müzik çalar uygulaması bağlı servislere örnek olabilir. Müzik çalar uygulamasını başlattığınızda servis çaları periyodik olarak veriyle besler. Bu veri hangi müziğin çaldığı, sıradaki müziğin adı ya da müziğin kaçıncı dakikasında olunduğu gibi bilgiler olabilir. Kullanıcı uygulamayı kapattığında müzik de durmalıdır. Uygulamayı yeniden başlattığında müzik yeniden çalmaya başlayabilir. Görüldüğü gibi servis, bileşenle sürekli etkileşim hâlindedir. Bu tür servislere bağlı servis diyoruz.

Servis yazmaya gelince iki servis sınıfı vardır.

Birincisi standart servis sınıfıdır.

Peki standart servis sınıfı nedir? Bu, geleneksel servis sınıfıdır ve görevin tamamını kendisi üstlenir. Ancak bu servis sınıfı, uygulamanın ana iş parçacığını (main thread) kullanır.

Bu noktada biraz ayrıntı vermem gerekiyor. Android işletim sistemi her uygulamaya işlemcinin belirli bir payını verir. Uygulamanız işlemcinin bu payını kullanır; servisiniz de aynı payı kullanacaktır. Servis bu payın büyük kısmını kullanırsa uygulamanız yavaşlar. Bu yüzden servisinizin görevi büyükse standart servis sınıfını kullanmamalısınız, çünkü uygulamanızı yavaşlatır. Servis görevi küçükse standart servis sınıfını kullanabilirsiniz.

Örneğin uygulamanız internetten bir film indirecek ve siz aynı anda uygulamayı kullanmak istiyorsunuz. İndirme zaman alır ve uygulamanın kaynaklarını kullanır. Uygulamayı aynı anda kullandığınızda yavaş çalışır. Kullanıcılar yavaş bir uygulama istemez, dolayısıyla bu sorunu çözmeniz gerekir.

Bu noktada başka bir servis sınıfı yardımımıza yetişiyor: intent service sınıfı.

Intent service sınıfı, servis sınıfının bir alt sınıfıdır. Uygulamanın ana iş parçacığını kullanmaz; ayrı bir çalışma iş parçacığı (work thread) oluşturur ve kendi iş parçacığını kullanır. Yani intent service sınıfı, Android işletim sisteminden işlemcinin ayrı bir payını ister. Bu, uygulamayı yavaşlatmaz. Intent service sınıfı uzun süren arka plan işlemlerinde kullanılır.

Android servisleri ile ilgili anlatacaklarım bu kadar. Bir sonraki yazıda görüşmek üzere.

Kadir Yapar

Yazılım geliştirici

Bilgisayar mühendisliği yüksek lisans derecesine sahip yazılım geliştirici. Android, iOS ve web uygulama geliştirme alanlarında uzmanlaşmıştır.

Kadir Yapar imzalı tüm yazıları görüntüle