Foreground Service: nedir, türleri ve çalışma mekanizması

Yazar: IT Sectr Yayınlanma: 2026-03-28 Okuma süresi: 11 dk

Foreground Service, durum çubuğunda zorunlu bildirimle kullanıcı tarafından görülebilen uzun süreli işlemleri gerçekleştiren bir Android hizmetidir. Kaynaklar yetersiz olduğunda sistemin durdurabileceği Background Service'in aksine, Foreground Service yüksek öncelik alır ve sınırlı bellek koşullarında bile çalışmaya devam eder. Android Developers, 2025 belgelerine göre, Foreground Service Android 12 ve sonrasını çalıştıran cihazlarda uzun süreli görevleri gerçekleştirmenin tek güvenilir yolu olmaya devam etmektedir.

Anahtar Noktalar

  • Foreground Service — durum çubuğunda kullanıcıya görünür zorunlu bildirimli hizmet
  • Notification — zorunlu öğe, onsuz sistem hizmeti başlatmaya izin vermez
  • Öncelik — Background Service'in aksine, Foreground Service bellek azaldığında öldürülmez
  • Android 12+ — foreground service'in arka plandan başlatılmasına kısıtlamalar getirildi
  • Foreground Service Type — hedef API 34+ için hizmet türünün zorunlu bildirimi

Foreground Service Nedir

Foreground Service, kullanıcının bildiği ve görebildiği işlemleri gerçekleştirmek üzere tasarlanmış bir Android bileşenidir. Bildirim panelinde kaydırılarak kaldırılamayan kalıcı bir bildirim görüntüler — hizmet çalıştığı sürece etkin kalır. Bu, kullanıcı tarafından fark edilmeden çalışan bir arka plan hizmetinden temel farktır.

Android sistemi Foreground Service'i kritik derecede önemli bir süreç olarak görür. RAM düşük olduğunda, platform önce Background Services'i, ardından önbelleğe alınmış Activities'i ve yalnızca istisnai durumlarda — Foreground Service'i sonlandırır. OOM Killer böyle bir hizmete ADJ seviye 2 atar ve bu da zorla sonlandırılmasını pratik olarak imkansız kılar.

Bir Foreground Service başlatmak için, geliştiricinin hizmeti oluşturduktan sonra birkaç saniye içinde startForeground() yöntemini çağırması gerekir, aksi takdirde sistem bir ForegroundServiceDidNotStartInTimeException istisnası oluşturur. Bu, bildirilmemiş arka plan görevlerini önlemek için getirilen katı bir platform gereksinimidir.

Tarihçe

Foreground Service mekanizması Android 1.0'da ilk SDK ile birlikte tanıtıldı, ancak zorunlu bildirim Android 9'da (API 28) ortaya çıktı. Bundan önce, bir hizmet kullanıcıya görünür bir gösterge olmadan ön planda çalışabiliyordu. Android 9'dan itibaren Google gereksinimleri sıkılaştırdı: startForeground çağıran herhangi bir uygulama, hizmet başladıktan sonra 5 saniye içinde bir bildirim sağlamalıdır.

Android 12'de (API 31), Foreground Service'in arka plan bağlamından başlatılmasına kısıtlamalar eklendi — artık birçok senaryo için FOREGROUND_SERVICE_SPECIAL_USE izni gerekiyor. Android 14 (API 34), manifestoda foregroundServiceType'ın zorunlu bildirimini getirerek hizmet mimarisini daha şeffaf ve öngörülebilir hale getirdi.

Foreground Service Nasıl Çalışır

Foreground Service'in çalışma mekanizması üç temel aşamaya dayanır: hizmet oluşturma, bildirimi bağlama ve görevi yürütme. Hizmet Service sınıfından miras alır ve onStartCommand() yöntemini geçersiz kılar; burada bir tanımlayıcı ve Notification nesnesiyle startForeground() çağrılır.

startForeground() çağrıldıktan sonra sistem, hizmet sürecini yüksek hayatta kalma önceliğiyle ön plan grubuna taşır. Bu, Android'in RAM yükünden bağımsız olarak süreci çalışır durumda tutmaya çalışacağı anlamına gelir. Foreground Service normal koşullarda sistem tarafından durdurulamaz — yalnızca kullanıcının bildirimi kaydırarak kaldırması veya açıkça stopSelf() çağırmasıyla durdurulabilir.

Foreground Service'in yaşam döngüsü onCreate(), onStartCommand() ve onDestroy() yöntemleri aracılığıyla yönetilir. onStartCommand() içinde geliştirici, sürecin öldürülmesinden sonra yeniden başlatma stratejisini tanımlar — START_STICKY sabiti, kaynaklar geri kazanıldıktan sonra sistemi hizmeti yeniden oluşturmaya zorlarken, START_NOT_STICKY otomatik yeniden başlatmayı önler.

Yaşam Döngüsü ve Durumlar

Foreground Service başlatıldığında, sırasıyla şu adımlar gerçekleştirilir: startService() çağrısı, onCreate() içinde Service nesnesi oluşturma, onStartCommand() içinde Intent işleme ve Notification nesnesiyle startForeground() çağrısı. Hizmet zaten çalışıyorsa ve yeni bir Intent gelirse, yalnızca onStartCommand() yeniden çağrılır — onCreate() hizmetin ömrü boyunca yalnızca bir kez yürütülür.

Foreground Service'in durdurulması, durum çubuğundan bildirimi gizleyen REMOVE_NOTIFICATION bayrağıyla stopForeground() aracılığıyla gerçekleşir. Bildirimi kaldırdıktan hemen sonra sistem, hizmeti ön plan olarak değerlendirmeyi bırakabilir ve önceliğini Background Service seviyesine düşürebilir, bu da süreci sonlandırmaya karşı savunmasız hale getirir.

PowerManager ile Etkileşim

PowerManager, Foreground Service'in çalışmasında önemli bir rol oynar çünkü Android'in güç tasarrufu modları (Doze, App Standby) görevleri yürütme yeteneğini sınırlayabilir. Ön plan durumunda olsa bile, hizmet pil politikalarına tabidir — ağ istekleri ertelenebilir ve zamanlayıcılar Doze pencereleriyle senkronize edilebilir. Gecikmelere toleranslı uzun süreli işlemler için Foreground Service'in WorkManager ile kombinasyon halinde kullanılması önerilir.

Foreground Service'in Ana Türleri

Android 14'ten (API 34) itibaren Google, manifestoda Foreground Service türünün zorunlu bildirimini getirdi. Her tür, izin verilen bir kullanım senaryosunu tanımlar — sistem, bildirilen tür ile gerçek hizmet davranışı arasındaki uyumu kontrol eder. Toplam 9 tür vardır, ancak en yaygın kullanılanlar aşağıdakilerdir.

dataSync

dataSync türü, cihaz ve sunucu arasında veri senkronizasyonu, dosya aktarımı ve yedekleme için tasarlanmıştır. Örnekler arasında bulut depolamaya fotoğraf yükleme, Firebase ile veritabanı senkronizasyonu veya uzak bir sunucuya günlük yükleme yer alır. Bu tür, android:foregroundServiceType="dataSync" özelliği aracılığıyla manifestoda gerekçenin belirtilmesini gerektirir.

mediaPlayback

mediaPlayback türü, arka planda ses ve video oynatmak için kullanılır — müzik çalarlar, podcast istemcileri, video oynatıcılar. Bu, kullanıcı müdahalesi olmadan süresiz olarak çalışabilen tek türdür. Bildirim kanalı yüksek önceliğe sahip olmalı ve MediaStyle aracılığıyla oynatma kontrollerini görüntülemelidir — oynat, duraklat, sonraki, önceki düğmeleri.

location

location türü, coğrafi konum hizmetleri içindir — navigasyon uygulamaları, aktivite takibi, coğrafi sınırlar. Android 14+ için FOREGROUND_SERVICE_LOCATION iznini bildirmek ve manifestoda türü belirtmek gerekir. Uygulamanın çalışma zamanında etkin bir konum izni olmalıdır, aksi takdirde sistem hizmeti başlatmayı reddeder.

TürİzinKullanım Örneği
dataSyncFOREGROUND_SERVICE_DATA_SYNCBulutla dosya senkronizasyonu
mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACKArka planda müzik çalar
locationFOREGROUND_SERVICE_LOCATIONSürüş sırasında GPS navigasyonu
cameraFOREGROUND_SERVICE_CAMERAVideo gözetim uygulaması
connectedDeviceFOREGROUND_SERVICE_CONNECTED_DEVICEBLE cihazıyla çalışma

Foreground Service vs Background Service

Temel fark, Foreground ve Background Service arasında görünür bir bildirimin ve hayatta kalma önceliğinin bulunmasıdır. Background Service, bellek azaldığında sistem tarafından herhangi bir zamanda durdurulabilirken, Foreground Service Android Low Memory Killer mekanizmasındaki yükseltilmiş süreç adj seviyesi sayesinde çalışmaya devam eder.

Background Service bildirim gerektirmez ve kullanıcı tarafından fark edilmeden çalışabilir. Ancak, Android 8'den (API 26) itibaren Google, arka plan hizmetlerini önemli ölçüde kısıtladı: arka plan bağlamından startService() artık çalışmaz ve ön plana geçmeyi planlayan herhangi bir hizmeti başlatmak için Context.startForegroundService() zorunlu hale geldi. Sistem ayrıca Arka Plan Yürütme Sınırlamaları getirdi — bir zamanlayıcı (şu anda 10 dakika) ve sonrasında Background Service zorla durdurulur.

Foreground Service ise zaman sınırına sahip değildir. Hizmet saatler veya günler boyunca çalışabilir — kullanıcı onu açıkça durdurana veya cihazı yeniden başlatana kadar. Bu, Foreground Service'i sürekli arka plan çalışması gerektiren uygulamalar için en uygun seçim haline getirir: müzik çalarlar, aktivite izleyicileri, VoIP arama uygulamaları.

Karşılaştırma Tablosu

ParametreForeground ServiceBackground Service
BildirimZorunluGerekli değil
Yaşam süresiSınırsız10 dakikaya kadar (API 26+)
Sistem önceliğiYüksek (ADJ 2)Düşük (ADJ 8+)
API 26+ başlatmastartForegroundService()Arka plandan yasak

Android 12+'da Gereksinimler

Android 12'den (API 31) itibaren Google, Foreground Service başlatmaya önemli kısıtlamalar getirdi. Ana değişiklik, çoğu hizmet türü için arka plan bağlamından startForegroundService() çağırmanın yasaklanmasıdır. İstisnalar yalnızca kullanıcının açıkça izin vermesi durumunda (örneğin, FOREGROUND_SERVICE_SPECIAL_USE izni aracılığıyla) veya hizmetin BOOT_COMPLETED yayın intentine yanıt olarak başlatılması durumunda geçerlidir.

API 34+ hedefleyen uygulama manifestosu, bildirilen her hizmet için bir foregroundServiceType bloğu içermelidir. Örneğin, bir veri senkronizasyon hizmeti için android:foregroundServiceType="dataSync" belirtin. Tür belirtilmezse, sistem hizmeti geçersiz kabul eder ve başlatma girişiminde MissingForegroundServiceTypeException fırlatır. Google Play ayrıca tür uyumunu kontrol eder ve uyuşmazlık durumunda yayınlamayı reddedebilir.

Android 14+ İzinleri

Android 14'te (API 34), her Foreground Service türünün karşılık gelen bir izni vardır. Geliştirici bunları manifestoda bildirmeli ve hizmeti başlatmadan önce çalışma zamanında talep etmelidir. dataSync için FOREGROUND_SERVICE_DATA_SYNC gerekir; mediaPlayback için FOREGROUND_SERVICE_MEDIA_PLAYBACK gerekir. Kullanıcı ayarlardan izni iptal edebilir, bu da aktif hizmeti durdurur.

Google ayrıca Android 14'te Foreground Service Bildirim Zaman Aşımı mekanizmasını getirdi: hizmet oluşturulduktan sonra 10 saniye içinde startForeground() çağırmazsa, sistem bir istisna oluşturur. Bu sıkılaştırma, bildirim çağrısını geciktiren veya atlayan ve etkili bir şekilde foreground kılığında Background Service olarak çalışan uygulamalarla mücadele etmeyi amaçlamaktadır.

Foreground Service Kullanım Durumları

Foreground Service, arka planda garantili yürütme gerektiren geniş bir görev yelpazesinde kullanılır. En yaygın senaryolar arasında medya oynatma, coğrafi konum takibi, veri senkronizasyonu ve çevre birimleriyle çalışma bulunur. Her birini ayrıntılı olarak inceleyelim.

Medya Oynatıcılar ve Ses Akışı

Klasik bir örnek, uygulama küçültüldükten sonra da oynatmaya devam eden bir müzik çalardır. Hizmet, MediaStyle bildirimi, kontrol düğmeleriyle başlar ve mediaPlayback türünü kullanır. Kullanıcı durum çubuğunda parça bilgilerini görür ve uygulamayı açmadan oynatmayı kontrol edebilir.

GPS İzleyiciler ve Navigasyon

Navigasyon uygulamaları, sürekli koordinat takibi için location türünde Foreground Service kullanır. Hizmet, geçerli hız, seyahat süresi ve takibi durdurma düğmesi içeren bir bildirim görüntüler. Foreground Service olmadan sistem, birkaç dakika sonra arka planda koordinat almayı durdurur ve navigasyonu imkansız hale getirir.

VoIP Çağrıları

Sesli ve görüntülü arama uygulamaları — VoIP istemcileri — aktif bir bağlantıyı sürdürmek için Foreground Service kullanır. phoneCall türündeki (Android 14'ten itibaren) hizmet, uygulama küçültüldüğünde aramanın düşmemesini sağlar. Bildirim, arama süresini ve mikrofon ile hoparlör kontrollerini görüntüler.

  • Medya oynatıcılar — ses akışı, podcast'ler, arka planlı video oynatıcılar
  • Navigasyon — GPS takibi, coğrafi sınırlar, sürüş navigatörleri
  • VoIP çağrıları — Skype, Zoom, Telegram — aktif çağrıyı sürdürme
  • Fitness izleyicileri — adım sayma, kalp atışı takibi, egzersizler
  • Senkronizasyon — fotoğraf yükleme, veri yedekleme, çevrimdışı içerik güncelleme

Kotlin'de Foreground Service Oluşturma

Veri senkronizasyonu için Kotlin'de bir Foreground Service oluşturmayı inceleyelim. Hizmet bir Activity'den başlatılacak, ilerleme durumunu gösteren bir bildirim görüntüleyecek ve tamamlandıktan sonra düzgün bir şekilde sonlanacaktır. Örnek, tüm zorunlu öğeleri gösterir: manifestoda bildirim, bildirim kanalı, startForeground() çağrısı ve foregroundServiceType işleme.

kotlin
class SyncService : Service() {

    companion object {
        const val CHANNEL_ID = "sync_channel"
        const val NOTIFICATION_ID = 1001
    }

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

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        val notification = buildNotification()
        startForeground(NOTIFICATION_ID, notification)
        performSync()
        return START_STICKY
    }

    private fun createNotificationChannel() {
        val channel = NotificationChannel(
            CHANNEL_ID,
            "Senkronizasyon",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "Veri senkronizasyon kanalı"
        }
        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }

    private fun buildNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Senkronizasyon")
            .setContentText("Sunucuya veri yükleme")
            .setSmallIcon(R.drawable.ic_sync)
            .setOngoing(true)
            .build()
    }

    private fun performSync() {
        GlobalScope.launch(Dispatchers.IO) {
            // Senkronizasyon emülasyonu
            delay(5000)
            stopForeground(Service.STOP_FOREGROUND_REMOVE)
            stopSelf()
        }
    }

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

Manifestoda Hizmet Bildirimi

Hizmetin Android 12+'da doğru çalışması için, Foreground Service'i AndroidManifest.xml içinde türü ve gerekli izinlerle birlikte bildirmeniz gerekir. foregroundServiceType özelliği hedef API 34+ için zorunludur ve FOREGROUND_SERVICE_DATA_SYNC ile POST_NOTIFICATIONS izinleri çalışma zamanında talep edilmelidir.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
    android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission
    android:name="android.permission.POST_NOTIFICATIONS" />

<application ...>
    <service
        android:name=".SyncService"
        android:foregroundServiceType="dataSync"
        android:exported="false" />
</application>

Sınırlamalar ve Alternatifler

Yüksek güvenilirliğine rağmen, Foreground Service'in sınırlamaları vardır. Bunlardan en önemlisi kullanıcıya görünürlüktür. Uygulama, bildirim olmadan arka planda uzun süreli görevler gerçekleştiremez ve bu UX açısından her zaman kabul edilebilir değildir. Ayrıca sistem, bazı türler için zaman sınırı aşıldığında Foreground Service'i bile zorla durdurabilir — örneğin, dataSync birkaç saatlik çalışmayla sınırlıdır.

Foreground Service'e bir alternatif, ertelenmiş ve arka plan görevleri için bir Android Jetpack kitaplığı olan WorkManager'dir. WorkManager, cihaz yeniden başlatıldıktan sonra bile görev yürütmeyi garanti eder ve görev zincirlerini, periyodik işlemleri ve ağ ile pil kısıtlamalarını destekler. Çoğu arka plan işlemi için Google, doğrudan hizmet yerine WorkManager'i önerir.

JobScheduler, görevleri planlamak için Android'de yerleşik bir API'dir. Ertelenebilecek işlemler için uygundur: Wi-Fi senkronizasyonu, şarj cihazına bağlandığında veri indirme. JobScheduler, pilden tasarruf etmek için görevleri pencerelerde gruplandırır; oysa Foreground Service güç tasarrufu durumundan bağımsız olarak sürekli çalışır.

Kısa görevler için (10–15 saniyeye kadar), ertelenmiş yürütmeyle WorkManager'dan CoroutineWorker kullanabilirsiniz. Bir görevin belirli bir zamanda kesin olarak yürütülmesi gerekiyorsa, BroadcastReceiver ile birlikte AlarmManager kullanılır. Bu nedenle, Foreground Service uzun süreli sürekli işlemler için bir çözümdür, tüm arka plan senaryoları için evrensel bir araç değildir.

  • WorkManager — yeniden başlatma desteğiyle ertelenmiş ve garantili görevler için
  • JobScheduler — ağ ve pil durumunu dikkate alarak görevleri planlamak için
  • AlarmManager — görevleri tam zamanda yürütmek için
  • CoroutineWorker — coroutine desteğiyle kısa arka plan işlemleri için

Sıkça Sorulan Sorular

Android'de Foreground Service nedir?

Foreground Service, durum çubuğunda kalıcı bildirimi olan, kullanıcıya görünür uzun süreli görevleri gerçekleştiren bir Android hizmetidir. Yüksek hayatta kalma önceliğine sahiptir ve Background Service'in aksine, bellek azaldığında sistem tarafından durdurulmaz.

Foreground Service, Background Service'ten nasıl farklıdır?

Foreground Service zorunlu bir bildirim görüntüler, zaman sınırı yoktur ve sistem sonlandırmasına karşı korunur. Background Service kullanıcı için görünmezdir, 10 dakikaya kadar (API 26+) çalışır ve herhangi bir zamanda Low Memory Killer tarafından durdurulabilir.

Android 14'te hangi Foreground Service türleri vardır?

Android 14, 9 tür tanımlar: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health ve remoteMessaging. Her tür, ilgili bir izin ve foregroundServiceType özelliği aracılığıyla manifestoda bildirim gerektirir.

startForeground zamanında çağrılmazsa ne olur?

Hizmet, oluşturulduktan sonra 10 saniye içinde startForeground() çağırmazsa (Android 14), sistem bir ForegroundServiceDidNotStartInTimeException istisnası oluşturur ve hizmeti zorla durdurur. İşlem ana iş parçacığında çalışıyorsa uygulama ayrıca bir ANR (Application Not Responding) alır.

Foreground Service bildirimi gizlenebilir mi?

Hayır, Foreground Service bildirimini programatik olarak gizlemek imkansızdır. Android 9'dan (API 28) itibaren bildirim zorunludur ve kullanıcı tarafından kaydırılarak kaldırılamaz. Kaldırmanın tek yolu, stopForeground(REMOVE_NOTIFICATION) ve stopSelf() çağrılarak hizmeti durdurmaktır.

Özet

  • Foreground Service — durum çubuğunda zorunlu bildirimli Android hizmeti
  • Öncelik — Foreground Service pratikte sistem tarafından öldürülmez (ADJ 2), Background Service'in aksine (ADJ 8+)
  • Türler — Android 14, tür (dataSync, mediaPlayback, location, vb.) ve ilgili izinlerin bildirimini gerektirir
  • Sınırlamalar — Android 12+'da arka plandan başlatma yasak; bazı senaryolar için FOREGROUND_SERVICE_SPECIAL_USE gerekli
  • Alternatifler — WorkManager ertelenmiş görevler için, JobScheduler planlama için, AlarmManager kesin zaman için
  • Kod — zorunlu öğeler: NotificationChannel, startForeground(), manifestoda foregroundServiceType
  • Google Play — uygulama yayını, bildirilen tür ile gerçek hizmet kullanımı arasında uyum gerektirir

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