Mobil geliştirmede arka plan yürütme — özü, sınırlamaları ve çalışma prensipleri

Yazar: IT Sectr Yayınlanma: 2026-03-26 Okuma süresi: 9 dk

Background Execution, mobil uygulama ön planda olmadığında kodun çalıştırılmasını sağlayan bir mekanizmadır. Bu mekanizma olmadan, sistem uygulamayı simge durumuna küçültüldüğünde askıya alır. Apple, 2026'ya göre, iOS arka plan süresini 30 saniye ile sınırlandırırken, Android WorkManager ve Foreground Service aracılığıyla daha esnek senaryolar sunar.

Önemli Noktalar

  • Background Execution — uygulama simge durumuna küçültüldüğünde veya etkin değilken kod çalıştırma.
  • iOS — katı sınırlar: görevler için 30 saniye, sıkı Background Modes ve App Refresh.
  • Android — WorkManager, Foreground Service, Scheduling ve farklı kısıtlamalarla Doze modu.
  • Enerji tüketimi — sınırlamaların ana nedeni: arka plan işlemleri cihazın pil ömrünü azaltır.
  • Gizlilik — Android 8 ve iOS 13'ten itibaren sistemler, arka plan çalışması için açık izinler gerektirir.

Mobil uygulamalarda arka plan yürütme nedir?

Background Execution, bir uygulamanın kullanıcı tarafından simge durumuna küçültüldükten veya başka bir uygulamaya geçildikten sonra kod çalıştırmaya devam etme yeteneğidir. Özel mekanizmalar olmadan, mobil işletim sistemi, arka plana geçtikten birkaç saniye içinde uygulamayı Suspended (askıya alınmış) durumuna getirerek etkin uygulamalar için CPU ve belleği serbest bırakır.

Uygulamanın arka plandaki durumları

Bir mobil uygulama, yaşam döngüsünün birkaç durumundan geçer: Foreground (etkin), Background (arka planda), Suspended (askıya alınmış) ve Terminated (sonlandırılmış). Background, uygulamanın görünür bir arayüz olmadan kod çalıştırabildiği tek durumdur. iOS ve Android bu durumdaki süreyi ve mevcut işlemleri farklı şekilde tanımlar.

Ana kullanım durumları

Arka plan yürütme, veri senkronizasyonu, içerik indirme, Push bildirimi işleme, arka plan coğrafi konum ve ses çalma için gereklidir. Senkronizasyon en yaygın senaryodur: uygulama, kullanıcı müdahalesi olmadan sunucuya veri gönderir veya güncellemeleri indirir.

  • Senkronizasyon — ağ durumu değiştiğinde veri yükleme ve indirme.
  • Coğrafi konum — fitness takipçileri ve navigasyon uygulamalarında konum takibi.
  • Medya — arka planda ses ve video oynatma (müzik, podcast).
  • Bildirimler — Push ve yerel bildirimlerin işlenmesi.
  • İndirme — arka planda büyük dosyaları (podcast, video) indirme.

Mobil işletim sistemleri arka plan yürütmeyi neden sınırlar

Arka plan yürütmenin sınırlamaları üç faktörden kaynaklanır: enerji tüketimi, cihaz performansı ve kullanıcı gizliliği. CPU ve radyo modülleri (Wi-Fi, hücresel veri) en fazla enerjiyi tüketir — her arka plan işlemi pil ömrünü azaltır.

Enerji tüketimi ve pil ömrü

Google araştırmaları, her 5 dakikada bir arka plan görevi çalıştıran uygulamaların cihazın pil ömrünü günde %20–30 oranında azalttığını göstermektedir. Saatte bir kez sıklığında optimize edilmiş arka plan işlemleri bile, bu tür ikiden fazla uygulama varsa belirgin bir etkiye sahiptir.

RAM ve performans

Her arka plan uygulaması RAM kaplar. RAM yetersiz olduğunda, sistem uygulamaları bellekten boşaltır ve bu da kullanıcı geri döndüğünde yeniden başlatmaya neden olur. iOS, Jetsam algoritmasını kullanır — bellek sınırı aşıldığında arka plan işlemlerini zorla sonlandırma mekanizması. Android, benzer bir prensiple LMK (Low Memory Killer) kullanır.

Kullanıcı gizliliği

Android 10 ve iOS 13'ten itibaren sistem, uygulamaların arka plan çalışmasının amacını beyan etmesini gerektirir. Android, arka planda Broadcast Receiver başlatılmasına kısıtlamalar getirdi. iOS, proje Yeteneklerinde (Capabilities) Background Mode belirtilmesini gerektirir. Kullanıcı, ayarlardan herhangi bir uygulama için arka plan yürütmeyi devre dışı bırakabilir.

İşletim SistemiSürümKısıtlamaEtki
Android8.0IMPLICIT_BROADCAST yasakArka plan Broadcast'lerin %67'si bozuk
Android9.0Doze iyileştirildiAğ çağrıları kısıtlandı
Android12+Foreground Service kısıtlandıArka plandan başlatma yasak
iOS7+Background App RefreshPeriyodik güncelleme pencereleri
iOS13+BGTaskSchedulerYürütme yerine planlama

Android'de arka plan yürütme: WorkManager ve Foreground Service

Android, arka plan yürütme için her biri farklı bir görev kategorisini çözen birkaç mekanizma sağlar. WorkManager, ertelenmiş ve periyodik görevler için önerilen API'dir. Foreground Service, görünür bir bildirimle anında yürütme içindir. JobScheduler, WorkManager'ın düşük seviyeli bir alternatifidir.

WorkManager — Evrensel çözüm

WorkManager, Android Jetpack'in bir parçasıdır ve cihaz yeniden başlatıldıktan sonra bile tamamlanma garantisiyle arka plan görev yürütme sağlar. API, ağ durumunu, pil seviyesini ve Doze modunu dikkate alarak en uygun yürütme zamanını seçer. WorkManager, API 14+ ile uyumludur ve kullanımdan kaldırılan AlarmManager ve JobScheduler'ın yerini alır.

Foreground Service — Uzun süreli işlemler için

Bir uygulamanın kullanıcıya görünür bir görevi (müzik çalma, coğrafi konum kaydı) gerçekleştirmesi gerektiğinde, Foreground Service kullanılır. Hizmet, durum çubuğunda kalıcı bir bildirim gösterir ve daha yüksek önceliğe sahiptir — sistem, görev tamamlanana kadar onu sonlandırmaz. Android 13'ten itibaren POST_NOTIFICATIONS izni gereklidir.

Doze Modu ve pil optimizasyonu

Android 6.0'dan itibaren cihaz, boşta olduğunda Doze moduna girer. Bu modda ağ işlemleri, senkronizasyon ve JobScheduler ertelenir. WorkManager, Doze'a otomatik olarak uyum sağlar — görevler, cihaz bakım için uykudan uyandığında bir sonraki Bakım Penceresi (Maintenance Window) sırasında yürütülür.

iOS'te arka plan yürütme: Background Tasks ve App Refresh

iOS, arka plan yürütmeye daha katı bir yaklaşım benimser. Background App Refresh, periyodik veri güncellemesi için ana mekanizmadır. BGTaskScheduler, sistem durumuna göre görevleri planlamak için API'dir. Uzun süreli işlemler için Background Modes mevcuttur: audio, location, voip, fetch ve processing.

Background App Refresh

Background App Refresh, uygulamanın verileri senkronize etmek için her 15–30 dakikada bir uyanmasına izin verir. Uyanma süresi kullanıcı davranışına bağlıdır — sistem, kullanıcının uygulamayı ne sıklıkta açtığını analiz eder. Kullanıcılar, Ayarlar — Genel — Background App Refresh'te tek tek uygulamalar için bu özelliği devre dışı bırakabilir.

BGTaskScheduler — Modern yaklaşım

iOS 13'ten itibaren BGTaskScheduler, kullanımdan kaldırılan performFetch ve beginBackgroundTask'in yerini almıştır. Uygulama, bir tanımlayıcı ve minimum aralıkla görevleri kaydeder ve sistem en uygun yürütme zamanını belirler. Görevler iki türe ayrılır: BGProcessingTask (uzun, 10+ dakika) ve BGAppRefreshTask (kısa, 30 saniyeye kadar).

Yürütme süresi sınırları

iOS, arka plan görev yürütmesi için sınırlı süre ayırır — BGAppRefreshTask için 30 saniyeye kadar ve BGProcessingTask için 10 dakikaya kadar. Sınır aşıldığında, sistem görevi zorla sonlandırır. Geliştirici, ara sonuçları kaydetmek için süre sonu işleyicisini (expiration handler) çağırmalıdır.

Kod örnekleri: Android WorkManager

WorkManager kullanarak Android'de arka plan yürütmenin pratik bir uygulamasına bakalım. Ağ durumu farkındalığı ile her 8 saatte bir veri senkronizasyonu örneği. WorkManager, cihaz yeniden başlatıldıktan sonra bile görev yürütmeyi garanti eder.

kotlin
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
    override fun doWork(): Result {
        return try {
            syncDataToServer()
            Log.d("Sync", "Veriler senkronize edildi")
            Result.success()
        } catch (e: Exception) {
            Result.retry()
        }
    }
}

// Her 8 saatte bir periyodik görevi çalıştır
val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .setRequiresCharging(false)
    .build()

val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
    8, TimeUnit.HOURS
).setConstraints(constraints).build()

WorkManager.getInstance(context).enqueue(syncRequest)

Bildirimli Foreground Service

Kullanıcıya görünür uzun süreli işlemler için Foreground Service kullanın. Bildirimde ilerleme durumu gösteren dosya indirme örneği. Hizmet, kaldırılamayan bir bildirimle startForeground() öğesini çağırır. İndirme tamamlandığında — stopForeground(STOP_FOREGROUND_REMOVE).

kotlin
class DownloadService : Service() {
    override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
        startForeground(NOTIFICATION_ID, createNotification())
        downloadFile()
        stopForeground(STOP_FOREGROUND_REMOVE)
        stopSelf()
        return START_NOT_STICKY
    }
    private fun createNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Dosyayı indir")
            .setSmallIcon(android.R.drawable.ic_download)
            .build()
    }
}

Kod örnekleri: iOS BGTaskScheduler

iOS'te arka plan yürütme, BGTaskScheduler aracılığıyla yapılandırılır. İçerik güncelleme görevini kaydetme ve yürütme örneği. Uygulama, Info.plist'te görev tanımlayıcısını kaydetmeli ve görev planlanması gerektiğinde submit'i çağırmalıdır.

swift
import BackgroundTasks

func registerBackgroundTask() {
    BGTaskScheduler.shared.register(
        forTaskWithIdentifier: "com.app.refresh",
        using: nil
    ) { task in
        self.handleAppRefresh(task: task as! BGAppRefreshTask)
    }
}

func scheduleAppRefresh() {
    let request = BGAppRefreshTaskRequest(
        identifier: "com.app.refresh"
    )
    request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

func handleAppRefresh(task: BGAppRefreshTask) {
    scheduleAppRefresh()
    task.expirationHandler = {
        // Ara verileri kaydet
        cacheCurrentState()
    }
    fetchLatestData {
        task.setTaskCompleted(success: true)
    }
}

Background Processing Task

Uzun süreli işlemler (önbellek temizleme, veri işleme) için BGProcessingTask kullanın. Sistem, yürütme için 10 dakikaya kadar izin verir. Yalnızca cihaz şarj oluyorken ve Wi-Fi'ye bağlıyken çalışır. Info.plist'te ayrı bir tanımlayıcı ve register(forTaskWithIdentifier:) aracılığıyla kayıt gerektirir.

swift
func scheduleProcessing() {
    let request = BGProcessingTaskRequest(
        identifier: "com.app.cleanup"
    )
    request.requiresExternalPower = true
    request.requiresNetworkConnectivity = true
    request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

Android ve iOS yaklaşımlarının karşılaştırılması

Android ve iOS, arka plan yürütme felsefesinde temel olarak farklılık gösterir. Android, daha fazla kontrole sahip esnek araçlar sunar ancak geliştiricinin doğru API'yi seçmesini gerektirir. iOS, yetenekleri sınırlar ancak kullanıcı için kararlı performans ve pil ömrü garanti eder.

KriterAndroidiOS
Önerilen APIWorkManagerBGTaskScheduler
Maks. görev süresiSınırsız (Foreground Service)30 sn / 10 dk (processing)
Periyodik görevlerEvet, PeriodicWorkRequest ileEvet, BGAppRefreshTask ile
Yürütme garantisiEvet, yeniden başlatmadan sonra bileHayır — sistem ne zaman karar verir
Arka plan ağ erişimiDoze modu ile sınırlıbackground config ile URLSession aracılığıyla
Arka plan coğrafi konumForeground Service + izinBackground Mode location + NSLocation
Arka plan sesMedya bildirimli Foreground ServiceBackground Mode audio + AVAudioSession

Android WorkManager ne zaman seçilmeli

WorkManager, uygulama durumundan bağımsız olarak tamamlanması gereken görevler için idealdir: veri senkronizasyonu, analitik gönderme, kuyruk işleme. API, cihaz kapatıldıktan sonra bile yürütmeyi garanti eder — görev, başlatıldıktan sonra yeniden planlanır.

iOS BGTaskScheduler ne zaman seçilmeli

BGTaskScheduler, sistemin uygun herhangi bir zamanda gerçekleştirebileceği görevler için uygundur: yeni içerik indirme, widget'ları güncelleme, önbelleği temizleme. Acil işlemler için uygun değildir — cihaz Doze modundaysa veya pili zayıfsa sistem görevi erteler.

Sıkça Sorulan Sorular

Background Execution ve Background Modes arasındaki fark nedir?

Background Execution, arka planda çalışan herhangi bir kodu tanımlayan genel bir kavramdır. Background Modes, bir uygulamanın belirli türde arka plan işlemleri (ses, coğrafi konum, VoIP, fetch) gerçekleştirmesine izin veren iOS'a özgü bir mekanizmadır. Android, Foreground Service türleri aracılığıyla benzer bir yaklaşım kullanır.

Uygulamam arka planda 30 saniye sonra neden sonlanıyor?

iOS'te bu, BGAppRefreshTask için standart sınırdır. Sınıra ulaşıldığında sistem görevi zorla sonlandırır. Android'de, uygulama WorkManager veya Foreground Service kullanmadığında benzer bir durum oluşur — normal bir Service, arka plana geçtikten sonra sistem tarafından sonlandırılır.

Her iki platformda da görev yürütmesi nasıl garanti edilir?

Android'de WorkManager kullanın — yeniden başlatmadan sonra bile yürütmeyi garanti eder. iOS'te yürütme garanti edilemez — sistem görevin ne zaman çalıştırılacağına karar verir. Yürütmeyi garanti etmenin tek yolu, kullanıcı için görünür bir göstergeyle Background Modes (audio, location) kullanmaktır.

Arka plan yürütmesine izin verilip verilmediğini nasıl kontrol edebilirim?

iOS'te UIApplication.shared.backgroundRefreshStatus öğesini çağırın — durum .available, .denied veya .restricted. Android'de, pil optimizasyonu muafiyetini kontrol etmek için PowerManager.isIgnoringBatteryOptimizations() kullanın. WorkManager için kontrol gerekmez — API, sistem kısıtlamalarını kendisi halleder.

Arka plan yürütmenin alternatifleri nelerdir?

Push bildirimleri, arka plan kodu olmadan eylemleri tetiklemek için ana mekanizmadır. iOS'te VoIP için PushKit ve veri güncellemesi için Silent Push mevcuttur. Android'de — High Priority FCM ve Notification Trampoline. Foreground Service aracılığıyla WebSockets, gerçek zamanlı uygulamalar için bir alternatiftir.

Özet

  • Background Execution — uygulama simge durumuna küçültüldüğünde kod çalıştırma mekanizması, senkronizasyon, indirme ve bildirimler için kritik.
  • Android, WorkManager (garantili yürütme), Foreground Service (uzun görünür görevler) ve Doze modu kısıtlamaları sunar.
  • iOS, BGTaskScheduler (planlama), Background App Refresh (periyodik güncellemeler) ve medya ve coğrafi konum için Background Modes kullanır.
  • Enerji tüketimi — sınırlamaların ana nedeni: optimize edilmemiş arka plan işlemleri pil ömrünü %20–30 azaltır.
  • Gizlilik — her iki platform da açık izinler (Android POST_NOTIFICATIONS, iOS Background Modes) ve kullanıcı bildirimi gerektirir.
  • WorkManager, cihaz yeniden başlatıldıktan sonra yürütme garantisi olan tek API'dir; BGTaskScheduler sistem kararlarına güvenir.
  • Durum çubuğunda kullanıcıya görünür uzun süreli işlemler için Android'de Foreground Service ve iOS'te Background Modes kullanın.

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