Skip to content

Arkaplan Görev Yönetimi

Genel Bakış

Modern mobil uygulamalarda arkaplan işleme, kullanıcı deneyimini kesintiye uğratmadan kritik görevleri yerine getirmek için hayati öneme sahiptir. Bu dokümantasyon, iOS ve Android platformlarında etkili arkaplan görev yönetimi stratejilerini kapsar.

Hızlı Karar

İş TipiYaklaşımDikkat
Ertelenebilir syncWorkManager/BGTaskOS zamanlamasına uy
Kullanıcı görünür indirmeForeground serviceBildirim ve izin gerekir
Kısa cleanupApp lifecycle taskSüre garantisi yok
Kritik anlık işServer-side işlemMobil arka plana güvenme

Üretim Kontrol Listesi

  • Problem: İş gerçekten cihazda arka planda mı çalışmalı?
  • Çözüm: Constraint, retry, idempotency, timeout ve user-visible state net mi?
  • Trade-off: Arka plan iş deneyimi iyileştirir; batarya ve OS kısıtlarıyla sınırlıdır.
  • Hata durumu: Task kill, duplicate execution, missed schedule ve network unavailable ele alınmalı.
  • Ölçüm: Task success, retry count, execution time, battery impact ve queue age izlenmeli.
  • Güvenlik/maliyet: Arka plan işi hassas veriyi gereksiz taşımamalı; server'a almak bazen daha ucuzdur.

Platform-Specific Arkaplan İşleme

iOS Background Tasks

swift
import BackgroundTasks

class BackgroundTaskManager {
    static func registerBackgroundTasks() {
        BGTaskScheduler.shared.register(
            forTaskWithIdentifier: "com.app.refresh",
            using: nil
        ) { task in
            handleAppRefresh(task: task as! BGAppRefreshTask)
        }
    }
    
    private static func handleAppRefresh(task: BGAppRefreshTask) {
        task.expirationHandler = {
            task.setTaskCompleted(success: false)
        }
        
        // Arkaplan işlemini gerçekleştir
        performBackgroundWork { success in
            task.setTaskCompleted(success: success)
        }
    }
}

Android Background Services

kotlin
class BackgroundSyncService : Service() {
    private val binder = LocalBinder()
    
    inner class LocalBinder : Binder() {
        fun getService(): BackgroundSyncService = this@BackgroundSyncService
    }
    
    override fun onBind(intent: Intent): IBinder {
        return binder
    }
    
    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        startForegroundService()
        performBackgroundSync()
        return START_STICKY
    }
    
    private fun startForegroundService() {
        val notification = NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Senkronizasyon")
            .setContentText("Veriler senkronize ediliyor...")
            .setSmallIcon(R.drawable.ic_sync)
            .build()
            
        startForeground(1, notification)
    }
}

En İyi Uygulamalar

1. Batarya Optimizasyonu

  • İşlem süresini minimize edin
  • Ağ isteklerini gruplayın
  • Gereksiz işlemleri önleyin

2. Platform Sınırlamaları

  • iOS: 30 saniye çalışma süresi limiti
  • Android: Doze modu ve App Standby'yi dikkate alın

3. Hata Yönetimi

swift
func performBackgroundWork(completion: @escaping (Bool) -> Void) {
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let error = error {
            print("Arkaplan görevi başarısız oldu: \(error)")
            completion(false)
            return
        }
        
        // İşlem başarılı
        completion(true)
    }
    task.resume()
}

Eren Demir tarafından oluşturulmuştur.