Sobes.tech
Middle

Ce este un serviciu de fundal (serviciu în prim plan) în Android?

sobes.tech AI

Răspuns de la AI

Serviciul în prim plan (foreground service) este un tip de serviciu în Android care are o prioritate crescută și este vizibil pentru utilizator. Execută sarcini perceptibile pentru utilizator și nu trebuie să fie întrerupt pentru economisirea bateriei sau a memoriei.

Caracteristici cheie:

  • Afișează o notificare constantă în zona de notificări. Utilizatorul trebuie să poată vedea că serviciul rulează și potențial să interacționeze cu el.
  • Sistemul are mai puține șanse să închidă un serviciu în prim plan comparativ cu un serviciu obișnuit de fundal sau un fir, datorită priorității sale înalte.
  • Necesită permisiune specială FOREGROUND_SERVICE.
  • Este utilizat pentru sarcini precum redarea muzicii, urmărirea locației, sincronizarea datelor în timp real.

Ciclul de viață:

  1. Se pornește cu startForegroundService().
  2. În decurs de 5 secunde, trebuie să se apeleze startForeground(notificationId, notification) pentru a transfera serviciul în modul prim plan. Altfel, sistemul poate opri serviciul și arunca ForegroundServiceDidNotStartInTimeException.
  3. Se oprește cu stopSelf() sau stopService() dintr-un alt component, sau forțat de utilizator prin notificare. La oprire, trebuie apelat stopForeground(bool removeNotification) pentru a elimina notificarea.

Exemplu de pornire:

// Obținerea permisiunii
ActivityCompat.requestPermissions(
    this,
    arrayOf(Manifest.permission.FOREGROUND_SERVICE),
    REQUEST_CODE_FOREGROUND_SERVICE
)

// În callback după obținerea permisiunii sau dacă permisiunea este deja acordată
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)

În interiorul serviciului:

// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
    val notification: Notification = createNotification() // Metodă pentru crearea notificării
    startForeground(NOTIFICATION_ID, notification)
    // Aici începe executarea sarcinii serviciului
    return START_STICKY // Sau alt flag potrivit
}

override fun onDestroy() {
    stopForeground(true) // Elimină notificarea la oprire
    // Curățarea resurselor
    super.onDestroy()
}