Veri yükleme, içerik senkronizasyonu, analitik gönderme — birçok görev kullanıcının aktif katılımını gerektirmez. Ancak mobil cihazlar, pil tasarrufu ve performansı korumak için arka plan çalışmasını sınırlar. Arka plan görevleri (background tasks), kullanıcı uygulamayı görmediğinde kod çalıştırmasına izin veren mekanizmalardır. Bu makalede WorkManager, BGTaskScheduler, Foreground Service ve Doze Mode'un özelliklerini inceleyeceğiz. Daha fazla bilgi için resmi WorkManager dokümantasyonuna bakın.
Önemli Noktalar
Arka plan görevi, uygulama ön planda (aktif ekran) olmadığında çalışan herhangi bir koddur. Bu şunları içerebilir: sunucuyla periyodik veri senkronizasyonu, büyük dosyaları indirme, push bildirimlerini işleme, coğrafi konum takibi, widget güncelleme. Her platformun arka plan çalışması konusunda kendi kısıtlamaları vardır: iOS daha katıdır (10–30 dakika arka plan süresi), Android daha esnektir ancak 9. sürümden itibaren kuralları sıkılaştırmıştır.
Arka plan görevlerinin mimarisi üç düzey üzerine kuruludur: (1) acil görevler — hemen yürütülür (Foreground Service); (2) ertelenmiş görevler — uygun koşullarda yürütülür (WorkManager, BGTaskScheduler); (3) periyodik görevler — belirlenen aralıkta tekrarlanır. Doğru düzeyi seçmek, görevin zamanında tamamlanıp tamamlanmayacağını ve uygulama mağazası tarafından reddedilmeye yol açıp açmayacağını belirler.
Her iki platformda da Google/Apple, arka planda doğrudan iş parçacıklarını yönetmek yerine bildirimsel API'ler kullanılmasını şiddetle önerir. Android'de WorkManager ve iOS'ta BGTaskScheduler, sistemin uygulamalar arasında arka plan işini en iyi şekilde dağıtmasına ve enerji tasarrufu için görevleri gruplamasına olanak tanır. IT Sectr'da, arka plan mimarisi tasarımına her zaman güncelleme sıklığı ve aciliyet gereksinimlerini analiz ederek başlarız.
iOS, arka plan çalışması için çeşitli mekanizmalar sağlar. Background Fetch — sistem tarafından belirlenen aralıkta periyodik içerik güncellemesi (geliştirici tarafından değil). Uygulama, yeni veri indirmek için yaklaşık 30 saniyelik bir pencere alır. Background Fetch, Capabilities → Background Modes → Background Fetch üzerinden etkinleştirilir ve AppDelegate'te uygulanır: application(_:performFetchWithCompletionHandler:).
BGTaskScheduler, Background Fetch'in yerini alan iOS 13+ için modern API'dir. Geliştirici bir tanımlayıcı ile görev kaydeder ve sistem uygun koşullarda çalıştırır. BGAppRefreshTask — kısa içerik güncellemeleri için; BGProcessingTask — uzun süreli görevler için (önbellek temizleme, veritabanı senkronizasyonu). Görevler uygulama başlatıldığında kaydedilir ve sistem, pil durumu, ağ ve kullanıcı etkinliğini dikkate alarak yürütmelerini planlar.
Background Modes — belirli senaryolar için arka plan çalışmasına izin veren modların listesi: Audio (arka plan oynatma), Location (GPS takibi), VoIP (PushKit üzerinden aramalar), BLE (Bluetooth cihaz bağlantısı), Processing (BGTaskScheduler üzerinden uzun görevler). Her mod, App Store incelemesinde gerekçelendirme gerektirir. Gerçek ihtiyaç olmadan modları kullanmak, uygulama reddinin yaygın bir nedenidir.
Significant Location Change — sürekli coğrafi konuma ihtiyaç duymayan ancak kullanıcının önemli hareketleri (500 metreden fazla) hakkında bilgi sahibi olması gereken uygulamalar için bir mekanizma. Hücresel kule değiştiğinde sistem uygulamayı uyandırır. Bu mekanizma, sürekli GPS takibine kıyasla önemli ölçüde pil tasarrufu sağlar.
Android, arka plan görevleri için en zengin API setini sunar, ancak 8.0 sürümünden (API 26) itibaren kurallar daha katı hale gelmiştir. WorkManager, her tür arka plan görevi için Google tarafından önerilen çözümdür. WorkManager, cihaz yeniden başlatıldıktan sonra bile görev yürütmeyi garanti eder (BootReceiver aracılığıyla) ve görev zincirlerini, gözlemlenebilir LiveData/Flow'u ve API 14'e kadar geriye dönük uyumluluğu destekler.
WorkManager, Worker'ı kullanır — doWork() yöntemine sahip bir temel sınıf. Constraints, yürütme koşullarını tanımlar: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — minimum 15 dakika aralıklı periyodik görevler için. WorkManager, Doze Mode ve App Standby'ye otomatik olarak uyum sağlar, görevleri bakım pencerelerinde gruplandırır. Basit bir Worker örneği:
class SyncWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
val repository =
Injection.provideRepository(applicationContext)
repository.syncData()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Запланировать задачу
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
JobScheduler — daha eski bir API (Android 5+, API 21). Belirtilen koşullarla (ağ, şarj, boşta) görevleri planlar. Sınırlama: cihaz yeniden başlatmayı desteklemez (BootReceiver gerekir) ve gözlemlenebilir durumu yoktur. JobScheduler, eski projelerdeki basit görevler için uygundur; yeni projeler için WorkManager kullanın.
Foreground Service — kullanıcının kalıcı bir bildirim (ongoing notification) aracılığıyla gördüğü bir hizmettir. Şunlar için kullanılır: müzik çalma, GPS takibi, büyük dosyaları indirme. Foreground Service yüksek önceliğe sahiptir — bellek yetersiz olduğunda sistem onu öldürmez. Android 13'ten itibaren, bazı türler için FOREGROUND_SERVICE_SPECIAL_USE izni gerekir. Bir alternatif, ForegroundServiceOption ile WorkManager'dir (uzun görevler).
AlarmManager — tam zamanda çalışması gereken görevler için (alarm, hatırlatıcı). AlarmManager, cihazı Doze Mode'dan uyandırabilir (setAlarmClock). Yüksek güç tüketimi nedeniyle düzenli senkronizasyon için önerilmez. Periyodik görevler için WorkManager kullanın ve AlarmManager'ı yalnızca tam zaman kritik olduğunda kullanın.
| Senaryo | iOS | Android |
|---|---|---|
| Periyodik içerik güncellemesi | BGAppRefreshTask (BGTaskScheduler) | WorkManager (PeriodicWorkRequest) |
| Uzun arka plan görevi | BGProcessingTask | WorkManager + ForegroundService |
| Ses çalma | Background Audio Mode | Foreground Service |
| GPS takibi | Significant Location Change / Background Location | Foreground Service + FusedLocationProvider |
| VoIP / Aramalar | PushKit + CallKit | ConnectionService + Foreground Service |
| Tam zaman (alarm) | UNNotificationRequest (calendar) | AlarmManager |
| Push işleme (arka plan) | Notification Service Extension | FirebaseMessagingService (onMessageReceived) |
Doze Mode, arka plan görevlerinin yürütülmesini etkileyen Android'de bir güç tasarrufu modudur. Android 6.0'da (API 23) tanıtılmıştır. Cihaz şarj olmuyorsa, ekran kapalıysa ve cihaz hareketsizse, Doze Mode ağ isteklerini engeller, JobScheduler ve WakeLock'u erteler. Periyodik olarak Doze, bakım pencereleri açar — uygulamaların ertelenmiş görevleri yürütebileceği kısa aralıklar. Android 7.0'dan (API 24) itibaren Doze, yalnızca tamamen hareketsizken değil, ekran kapalıyken de etkinleşir.
App Standby — kullanılmayan uygulamaların bekleme moduna alındığı bir moddur. Bir uygulamanın aktif bildirimi yoksa ve birkaç gün açılmamışsa, Standby Bucket'a yerleştirilir: aktif (active), working, frequent, rare. Uygulama ne kadar az kullanılırsa, kısıtlamalar o kadar katı olur: ağ istekleri ertelenir, senkronizasyon engellenir, JobScheduler çalışmaz.
WakeLock — cihazı uyanık tutan bir mekanizma (uykuya dalmasını önler). Önemli işlemleri tamamlamak için kullanılır. WakeLock, görev tamamlandıktan sonra serbest bırakılmalıdır (release), aksi takdirde pil birkaç saat içinde tükenir. WakeLock, Doze Mode'da çalışmaz — sistem onu yok sayar. Android 8+'da WakeLock ile çalışmak, WAKE_LOCK izni ve uygun yaşam döngüsü yönetimi gerektirir.
IT Sectr'da, tasarım aşamasında Doze Mode ve App Standby'yi dikkate alıyoruz. WorkManager bu modları otomatik olarak işler, ancak Foreground Service için Doze'a geçişlerin doğru şekilde işlenmesi planlanmalıdır. Arka plan çalışmasının, güç tasarrufu modu etkinleştirilmiş gerçek cihazlarda ve uzun süreli boşta kalma sürelerinden sonra test edilmesi önerilir.
Arka plan görevleri tasarlarken şu ipuçlarını izleyin. 1. Yeni Android projeleri için her zaman WorkManager kullanın. Uyumluluk sorunlarını, Doze Mode'u ve cihaz yeniden başlatma sorunlarını çözer. 2. iOS'ta, iOS 13+ için Background Fetch yerine BGTaskScheduler'ı tercih edin. 3. Foreground Service'i yalnızca görev gerçekten görünür bir bildirim gerektirdiğinde kullanın. 4. WakeLock'u kötüye kullanmayın — pili tüketir ve uygulama reddine yol açabilir. 5. Arka plan görevlerini Doze Mode'da test edin: adb shell dumpsys deviceidle force-idle. 6. Görev tamamlanmasını her zaman günlükleme ve analitik yoluyla doğrulayın. 7. Sınırları unutmayın: iOS, Background Fetch için ~30 saniye ve BGProcessingTask için ~birkaç dakika verir. Android WorkManager, kesin yürütme süresini garanti etmez.
Sıkça Sorulan Sorular
Background Service, görünür bildirim olmadan çalışır ve sistem tarafından her an öldürülebilir. Foreground Service, kalıcı bir bildirim (ongoing notification) göstermelidir ve daha yüksek önceliğe sahiptir. Foreground Service, müzik çalma ve GPS takibi için kullanılır.
Doze Mode, cihaz kullanılmadığında ağ erişimini devre dışı bırakan ve JobScheduler/WakeLock'u erteleyen bir Android güç tasarrufu modudur. WorkManager, Doze Mode'a otomatik olarak uyum sağlar.
iOS'ta arka plan görevleri, Background Fetch (periyodik güncellemeler), BGTaskScheduler (ertelenmiş görevler) veya Background Modes (ses, VoIP, BLE, konum) aracılığıyla çalıştırılır. BGTaskScheduler, iOS 13+ için modern API'dir ve Background Fetch'in yerini alır.
WorkManager, Android'deki tüm arka plan görevleri için Google tarafından önerilen çözümdür. JobScheduler, sınırlı yeteneklere sahip daha eski bir API'dir. WorkManager görev zincirlerini, gözlemlenebilir LiveData/Flow'u ve API 14'e kadar geriye dönük uyumluluğu destekler.
App Standby, kullanılmayan uygulamaların bekleme durumuna alındığı bir Android modudur: ağ istekleri ertelenir, senkronizasyon duraklatılır. Bir uygulama birkaç gün kullanılmazsa, Android onu bir Standby Bucket'a (active, working, frequent, rare) yerleştirir.
Özet
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.