Sobes.tech
Middle

Android'de arka plan servisi (ön plan servisi) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Ön plandaki servis (foreground service), Android'de yüksek önceliğe sahip ve kullanıcı tarafından görülebilen bir servis türüdür. Kullanıcı için fark edilir görevleri yerine getirir ve pil tasarrufu veya bellek sıkıntısı durumlarında kesintiye uğramaması gerekir.

Ana özellikler:

  • Bildirim alanında sürekli bir bildirim gösterir. Kullanıcı, servisin çalıştığını görebilmeli ve onunla etkileşime geçebilir.
  • Sistem, yüksek önceliği nedeniyle normal arka plan servisi veya thread'e kıyasla ön plandaki servisi sonlandırma olasılığı daha düşüktür.
  • Özel izin FOREGROUND_SERVICE gerektirir.
  • Müzik çalma, konum takibi, gerçek zamanlı veri senkronizasyonu gibi görevler için kullanılır.

Yaşam döngüsü:

  1. startForegroundService() ile başlatılır.
  2. 5 saniye içinde startForeground(notificationId, notification) çağrısı yapılmalı, aksi takdirde sistem servisi durdurabilir ve ForegroundServiceDidNotStartInTimeException hatası atabilir.
  3. stopSelf() veya başka bir bileşenden stopService() ile veya kullanıcı tarafından bildirim aracılığıyla durdurulur. Durdurulduğunda, bildirim kaldırmak için stopForeground(bool removeNotification) çağrılmalıdır.

Başlangıç örneği:

// İzin alınması
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// İzin alındıktan sonra veya zaten izin varsa
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

Servis içinde:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Bildirimi oluşturma metodu
    startForeground(NOTIFICATION_ID, notification)
    // Burada servisin görevi başlar
    return START_STICKY // veya uygun başka bayrak
}

override fun onDestroy() {
    stopForeground(true) // Durdururken bildirimi kaldır
    // Kaynak temizliği
    super.onDestroy()
}