Background Service — nedir, türleri ve Android’de nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-27 Okuma süresi: 8 dk

Background Service, kullanıcı arayüzü olmadan arka planda uzun süreli işlemler gerçekleştirmek üzere tasarlanmış bir Android bileşenidir. Activity’nin aksine, Service uygulama küçültüldüğünde veya kullanıcı başka bir uygulamaya geçtiğinde bile çalışmaya devam eder. Android Developers, 2026’ya göre, üç tür hizmet vardır: Started Service, Bound Service ve Foreground Service, her biri kendi yaşam döngüsü ve uygulama alanına sahiptir.

Önemli Noktalar

  • Background Service, UI olmadan arka plan işlemleri için bir Android bileşenidir, herhangi bir aktiviteden bağımsız olarak çalışır.
  • Started Service, startService ile başlatılır ve stopSelf ile açıkça durdurulana kadar çalışır.
  • Bound Service, bindService ile bir bileşene bağlanır ve bağlı istemciler olduğu sürece yaşar.
  • Foreground Service, kalıcı bir bildirim görüntüler ve pil zayıf olduğunda sistem tarafından öldürülmez.
  • Android 8’den itibaren, arka plan hizmetlerinin arka planda başlatılması konusunda katı kısıtlamalar vardır.

Android’de Background Service Nedir?

Background Service (veya kısaca Service), Activity, BroadcastReceiver ve ContentProvider ile birlikte bir Android uygulamasının dört temel bileşeninden biridir. Activity’nin aksine, Service görsel bir arayüze sahip değildir ve uygulamanın ön planda olup olmadığına bakılmaksızın devam etmesi gereken işlemleri gerçekleştirmek üzere tasarlanmıştır.

Service, uygulamanın ana iş parçacığında çalışır, bu nedenle içindeki herhangi bir bloke edici işlem ayrı bir iş parçacığı oluşturulmasını gerektirir. Bu yapılmazsa, sistem ANR (Application Not Responding) hatası verecektir. Basit arka plan işlemleri için Android, otomatik olarak bir çalışma iş parçacığı oluşturan IntentService’i sağlar. Modern projelerde, ana iş parçacığını bloke etmeden asenkron işlem için Service içinde CoroutineScope ile Kotlin coroutine’lerinin kullanılması önerilir.

Service’in temel amacı, müzik çalma, dosya indirme, ağ isteklerini yönetme, veri senkronizasyonu ve kullanıcının uygulamadan ayrılmasından sonra devam etmesi gereken diğer görevlerdir. Ancak Android 8’den itibaren geliştiriciler, arka plan çalışma kısıtlamalarını dikkate alarak hizmet türleri arasında bilinçli bir seçim yapmalıdır.

Service Yaşam Döngüsü Nasıl Çalışır?

Service, Activity’den farklı olarak kendine özgü bir yaşam döngüsüne sahiptir. Dört temel yöntem içerir: onCreate, onStartCommand, onBind ve onDestroy. Bu döngüyü anlamak, bellek sızıntısı olmadan arka plan görevlerini doğru şekilde uygulamak için önemlidir.

onCreate ve onStartCommand

onCreate yöntemi, hizmet oluşturulduğunda bir kez çağrılır. Zamanlayıcılar, veritabanı bağlantıları ve soketler gibi kaynaklar burada başlatılır. onStartCommand yöntemi, startService her çağrıldığında çağrılır ve halihazırda çalışan bir hizmete komut gönderilmesine olanak tanır. Dönüş değeri, yeniden başlatma sırasında sistem davranışını belirler.

kotlin
class DownloadService : Service() {

    override fun onCreate() {
        super.onCreate()
        initializeDownloader()
    }

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        downloadFile(intent?.getStringExtra("url"))
        return START_STICKY
    }

    override fun onBind(intent: Intent): IBinder? = null
}

onBind ve onDestroy

onBind, bir hizmetin bindService aracılığıyla bağlanması sırasında çağrılır ve istemci etkileşimi için bir IBinder nesnesi döndürür. Bu yöntem yalnızca Bound Service için kullanılır. onDestroy, hizmet yok edilmeden önceki son çağrıdır. Tüm kaynaklar serbest bırakılır, iş parçacıkları durdurulur ve görevler iptal edilir.

Arka Plan Hizmet Türleri

Android, her biri kendi senaryosu için tasarlanmış üç tür Service sunar. Yanlış türü seçmek, uygulamanın dengesiz davranmasına veya pil tüketimine neden olabilir.

Started Service

Started Service, startService çağrılarak başlatılır ve stopSelf veya stopService çağırana kadar çalışır. Hemen gerçekleştirilmesi gereken görevler için uygundur: analitik gönderme, bir görüntüyü işleme, tek bir dosya indirme. İşini tamamladıktan sonra hizmet kendi kendine durur.

Bound Service

Bound Service, bir istemci-sunucu arabirimi sağlayarak bir Activity, Fragment veya başka bir bileşenin hizmetle etkileşime girmesine olanak tanır. Hizmet, en az bir istemci bağlı olduğu sürece yaşar. Tüm istemcilerin bağlantısı kesildiğinde hizmet yok edilir. Bound Service, çift yönlü iletişim gerektiren görevler için kullanışlıdır: müzik çalar, navigasyon.

Foreground Service

Foreground Service, durum çubuğunda kalıcı bir bildirimi olan bir Started Service’dir. Sistem böyle bir hizmeti aktif olarak kabul eder ve düşük bellek durumunda bile onu öldürmez. Foreground Service, müzik çalma, ses kaydı, konum takibi ve kullanıcı için önemli diğer görevler için zorunludur.

ParametreStartedBoundForeground
BaşlatmastartServicebindServicestartForeground
ÖmürstopSelf’e kadaristemciler olduğu sürecestopForeground’a kadar
Bildirimhayırhayırzorunlu
Öldürülebilirevetevethayır
Örnekindirmeçalarmüzik

Service Oluşturma ve Çalıştırma

Bir hizmet oluşturmak, Service’den miras alan bir sınıf bildirmek ve AndroidManifest.xml’e kaydetmekle başlar. Bildirim dosyasına kayıt olmadan sistem hizmeti başlatamaz ve startService çağrısı bir istisnaya neden olur.

kotlin
// AndroidManifest.xml’e kayıt
@SuppressLint("ForegroundServiceType")
class SyncService : Service() {

    override fun onStartCommand(
        intent: Intent?,
        flags: Int,
        startId: Int
    ): Int {
        startForeground(
            NOTIFICATION_ID,
            createNotification()
        )
        performSync(intent)
        return START_NOT_STICKY
    }
}

Bir Activity veya Fragment’ten hizmet başlatmak için, hizmet sınıfına açık bir başvuru içeren bir Intent kullanılır. Android 8’den itibaren Foreground Service, bildirim dosyasında FOREGROUND_SERVICE iznini gerektirir.

kotlin
// Started Service başlatma
val intent = Intent(this, SyncService::class.java)
intent.putExtra("action", "sync")
startService(intent)

// Foreground Service başlatma (Android 8+)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    startForegroundService(intent)
} else {
    startService(intent)
}

Android 8+’de Kısıtlamalar

Android 8’den itibaren (API 26), Google arka plan hizmetleri için katı kısıtlamalar getirdi. Arka planda hizmet başlatma (uygulama ön planda değilken) yalnızca istisnai durumlarda izin verilir: push bildirimi alındığında, cihaz başlatıldıktan sonra veya JobScheduler aracılığıyla.

Hemen yürütülmesi gerekmeyen uzun süreli görevler için WorkManager veya JobScheduler kullanılması önerilir. Bir uygulamanın gerçekten çalışan bir hizmete ihtiyacı varsa, tek yol kullanıcının görebileceği bir bildirim içeren Foreground Service’dir. Arka planda bildirimsiz bir hizmet başlatmak sistem tarafından görmezden gelinecektir.

Geriye Dönük Uyumluluk İçin JobIntentService

JobIntentService, Android 5+’te çalışmak üzere destek kütüphanesinde ortaya çıkan özel bir sınıftır. IntentService’in davranışını (otomatik çalışma iş parçacığı, sıralı işleme) JobScheduler aracılığıyla zamanlamayla birleştirir. Android 8+’de JobIntentService dahili olarak JobScheduler’ı kullanırken, eski sürümlerde normal bir Service kullanır. Bu, ek Android sürümü kontrolleri olmadan arka plan görevlerinin tek tip şekilde işlenmesine olanak tanır.

kotlin
class UploadJobService : JobIntentService() {

    companion object {
        private const val JOB_ID = 1000

        fun enqueueWork(context: Context, work: Intent) {
            enqueueWork(
                context,
                UploadJobService::class.java,
                JOB_ID,
                work
            )
        }
    }

    override fun onHandleWork(intent: Intent) {
        val fileUri = intent.getStringExtra("file_uri")
        // Bir arka plan iş parçacığında çalışır
        uploadFile(fileUri)
    }
}

Service’de Bellek Yönetimi ve Sızıntılar

Background Service ile çalışırken sık karşılaşılan sorunlardan biri bellek sızıntılarıdır. Bir Service bir Activity’den daha uzun yaşayabileceğinden, Service içindeki Activity’ye yapılan referanslar (listener, callback veya broadcast aracılığıyla) UI bileşenlerinin çöp toplamasını engeller. Service-UI iletişimi için WeakReference, ViewModel veya LiveData kullanılması önerilir. onDestroy’de tüm abonelikleri iptal etmeyi, iş parçacıklarını durdurmayı ve imleçleri kapatmayı unutmayın.

Service vs WorkManager: Ne Zaman Hangisini Seçmeli

Background Service ve WorkManager arasındaki seçim senaryoya bağlıdır. Service, hemen ve sürekli olarak çalışması gereken görevler için uygundur: müzik çalma, ses kaydı, GPS takibi. WorkManager, ertelenmiş, garantili görevler için daha iyidir: senkronizasyon, analitik gönderme, log yükleme. WorkManager cihaz yeniden başlatmalarında hayatta kalırken, Service kalmaz. Service bildirimle ön planda olabilirken, WorkManager arka planda sessizce çalışır. Pratikte geliştiriciler her iki yaklaşımı birleştirir: kullanıcı için kritik görevlerde Foreground Service ve arka plan bakımı için WorkManager.

Android 12, hizmet türünün belirtilmesini gerektiren android:foregroundServiceType bayrağını getirdi: dataSync, camera, connectedDevice, location, mediaPlayback ve diğerleri. Yanlış tür belirtimi başlatma sırasında bir istisnaya neden olur. Bu uygulama, Background Service’i hem kullanıcı hem de sistem için daha şeffaf hale getirir.

AndroidManifest’te Service Kaydı Örneği

Bildirim dosyasında Service’in doğru kaydı, exported özelliğini (harici uygulamalar için erişilebilirlik), foregroundServiceType’ı (Android 12+’de arka plan hizmet türü) ve izni içerir. Bound Service için JobIntentService için android:permission="android.permission.BIND_JOB_SERVICE" bildirilmelidir. Bildirim dosyasına kayıt olmadan herhangi bir startService veya bindService çağrısı bir istisnaya neden olur, bu nedenle Service ile ilgili sorunları teşhiste ilk adım bildirim dosyasını kontrol etmektir.

Sıkça Sorulan Sorular

Service varsayılan olarak hangi iş parçacığında çalışır?

Service, uygulamanın ana iş parçacığında (UI Thread) çalışır. onStartCommand veya onHandleIntent içindeki herhangi bir bloke edici işlem ayrı bir iş parçacığına veya coroutine’e taşınmalıdır, aksi takdirde sistem 5 saniye sonra ANR verir.

IntentService normal bir Service’den nasıl farklıdır?

IntentService, otomatik olarak bir çalışma iş parçacığı oluşturan ve komutları sırayla işleyen Service’in bir alt sınıfıdır. Son görevi tamamladıktan sonra IntentService kendi kendine durur. Android 8’den itibaren IntentService, JobIntentService veya WorkManager lehine kullanımdan kaldırılmıştır.

Android 12’de uygulama arka plandayken Service başlatılabilir mi?

Android 12’de arka plandan Started Service başlatmak yasaktır. İstisna, bildirim dosyasında bildirilen foregroundServiceType ve geçerli bir bildirime sahip Foreground Service’dir. Yüksek öncelikli bir FCM mesajı aldıktan sonra kısa bir başlatmaya da izin verilir.

Service’den Activity’ye veri nasıl aktarılır?

Üç yöntem vardır: yerel yayın ile BroadcastReceiver, Handler aracılığıyla Messenger mekanizması ve paylaşılan bir ViewModel ile MVVM mimarisinde LiveData/Flow. Bound Service için, doğrudan yöntem çağrılarıyla IBinder kullanılır.

Bir Service çalışırken uygulama yeniden başlatılırsa ne olur?

Bir Service, START_STICKY bayrağıyla başlatıldıysa, sistem düşük bellek nedeniyle işlem öldürüldükten sonra onu yeniden başlatır. START_NOT_STICKY bayrağı, sistemin hizmeti yeniden başlatmayacağı anlamına gelir. START_REDELIVER_INTENT, START_STICKY’ye benzer ancak son Intent’i iletir.

Özet

  • Background Service, UI olmadan arka plan işlemleri için bir Android bileşenidir, ana iş parçacığında çalışır.
  • Üç tür — Started, Bound ve Foreground — tek seferlik görevlerden bildirimlerle sürekli çalışmaya kadar farklı senaryoları kapsar.
  • Yaşam döngüsü onCreate, onStartCommand, onBind ve onDestroy’i içerir — onDestroy’de kaynakları serbest bırakmak önemlidir.
  • Foreground Service, Android 8+’de sistem tarafından öldürülme riski olmadan güvenilir şekilde çalışan tek türdür.
  • WorkManager ve JobScheduler, ertelenmiş ve garantili arka plan görevleri için tercih edilir.
  • Service’i kullanmayın hassas zamanlama gerektiren görevler için — bunun yerine AlarmManager kullanın.
  • Her zaman kaydedin Service’i AndroidManifest.xml’e ve Android 12+’de android:foregroundServiceType’ı belirtin.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun