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ță:
- Se pornește cu
startForegroundService(). - Î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 aruncaForegroundServiceDidNotStartInTimeException. - Se oprește cu
stopSelf()saustopService()dintr-un alt component, sau forțat de utilizator prin notificare. La oprire, trebuie apelatstopForeground(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()
}