2026'da Android Service Nasıl Kullanılır: Hızlı Yanıt ve Kullanım Senaryoları
Android Service, kullanıcı arayüzü (UI) olmadan arka planda görevler yürütmek için kullanılan bir bileşendir. 2026 yılında kısa süreli ve gecikmeli görevler için WorkManager zorunludur; uzun süreli ve gerçek zamanlı işlemler (müzik, navigasyon, VoIP) için ise belirtilen FOREGROUND_SERVICE_TYPE ve görünür bir bildirim ile foreground service kullanın. Aşağıda pratik örnekler, Android 16 kısıtlamaları ve uygulanabilir adımlar yer almaktadır.
Android Service Nedir ve Hangi Türleri Vardır?
Service, Activity'ye bağlı olmayan ve arka planda iş yapan bir süreç/bileşendir. Temel türler şunlardır:
- Started Service — startService/startForegroundService ile başlatılır; uzun süren işlemler için uygundur ancak arka planda kısıtlamalara tabidir.
- Bound Service — bindService aracılığıyla istemcilerle bağlanır; bileşenler arasında veri alışverişi için uygundur.
- Foreground Service — kalıcı bir bildirim ve yüksek öncelik ile çalışır; medya oynatıcılar, navigasyon ve VoIP için gereklidir.
- Isolated Process — kod izolasyonu için kullanılır (ayrıcalıklı/sistem uygulamaları).
2026 yılında hayatta kalma gerektiren görevler için foreground tercih edilen seçenektir. WorkManager, çoğu gecikmeli ve periyodik görevi karşılar.
Müzik, VoIP ve navigasyon için her zaman doğru FOREGROUND_SERVICE_TYPE ve görünür bir bildirim ile foreground service kullanın; bu, sistemin servisi sonlandırma olasılığını önemli ölçüde azaltır.
Arka Plan Görevleri Nasıl Başlatılır — Adım Adım ve Kod
- Uzun süren görevler (foreground service) için — minimum gereksinimler:
class MyForegroundService : LifecycleService() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
createNotificationChannel()
val notif = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Senkronizasyon")
.setContentText("Çalışma devam ediyor")
.build()
startForeground(1, notif)
lifecycleScope.launch(Dispatchers.IO) { doWork(); stopSelf() }
return START_STICKY
}
}
AndroidManifest:
<service android:name=".MyForegroundService"
android:foregroundServiceType="dataSync|mediaPlayback|location" />
Activity'den başlatma:
val intent = Intent(this, MyForegroundService::class.java)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) startForegroundService(intent)
else startService(intent)
- Gecikmeli/tekrarlayan görevler için — WorkManager (önerilir):
class SyncWorker(appContext: Context, params: WorkerParameters): CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result { /* sync */; return Result.success() }
}
val request = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(Constraints.Builder().setRequiresBatteryNotLow(true).build())
.build()
WorkManager.getInstance(context).enqueue(request)
- Broadcast'ten gelen kısa arka plan çağrıları için — foreground veya JobScheduler/WorkManager kullanın; arka planda startService genellikle yasaktır.
Yeni sürümlerde (Android 14+) ilk ~5 saniye içinde startForeground() çağrılmazsa, servis hata vererek sonlandırılır.
2026'daki Kısıtlamalar ve Bunlarla Nasıl Başa Çıkılır
- Çoğu gecikmeli görev için WorkManager zorunludur: Android 16 denetim yapar ve engellemeye çalışırsanız yayınlamayı engelleyebilir.
- Doze / App Standby: Bekleme süresi sonrasında arka plan ağ erişimi ve işleme kısıtlanır. Çözüm: Geri çekilme (backoff) ile WorkManager üzerinden görevleri planlayın ve gerekirse PowerManager.isIgnoringBatteryOptimizations() kontrolünü yapın.
- Background Execution Limits: Arka plandan startService genellikle yasaktır — startForegroundService veya WorkManager kullanın.
- Network throttling: Arka plan bağlantıları yaklaşık ~10 dakika içinde kapatılabilir; uzun indirmeler için foreground service kullanın.
- Phantom Process Killer / PROC_STATE: Sistem kullanılmayan süreçleri sonlandırır. Durumları adb ve loglama ile izleyin.
Pratik öneriler:
- REQUEST_IGNORE_BATTERY_OPTIMIZATIONS isteğinde kullanıcıya gerekçeli bir açıklama sunun; nadiren kullanın.
- Bildirim göstermesi ve garantili şekilde çalışması gereken görevler için mantığı WorkManager + ForegroundInfo kombinasyonuna taşıyın.
- Doze modunda test edin: adb shell dumpsys deviceidle enable + force-idle.
- targetSdk sürümünü Android 16'ya yükseltin ve yayınlamadan önce servis denetimlerini geçin.
Sık Yapılan Hatalar
- Foreground olmadan uzun süreli background service tutmaya çalışmak — servis sonlandırılır.
- Foreground service için gizli veya uyumsuz bildirim kullanmak — sistem yine de süreci sonlandırabilir.
- Manifest dosyasında foregroundServiceType belirtmemek (media/location) — önceliği düşürür.
- Kullanıcıya açıklama yapmadan optimizasyonları yoksayma isteğinde bulunmak — reddedilme ve kötü yorumlar.
SSS
- Tüm arka plan görevleri için WorkManager gerekli mi?
- Hayır, ancak senaryoların ~%90'ını kapsar (gecikmeli/tekrarlayan görevler). Gerçek zamanlı işlemler için — foreground service.
- Pil optimizasyonu istisnasını güvenli şekilde nasıl talep edebilirim?
- Bunun neden gerekli olduğunu açıklayan bir ekran gösterin ve ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS içeren Intent'i çağırın; yalnızca kritik durumlar için kullanın.
- Play Store, kısıtlamaları aşan uygulamayı siler mi?
- Evet — arka plan görevleri kurallarının ihlali ve davranışın gizlenmesi, yayın sırasında kaldırılma veya engellenmeye yol açabilir.
Derlemenizi Android 16 SDK için güncelleyin, WorkManager ve doğru foreground service türlerini kullanın; bu, 2026'da arka plan görevlerinin kararlı çalışması için asgari gereksinimdir.