Middle
Cos'è un servizio in background (servizio in primo piano) in Android?
sobes.tech AI
Risposta dell'AI
Il servizio in primo piano (foreground service) è un tipo di servizio in Android che ha una priorità elevata ed è visibile all'utente. Esegue compiti che sono percepibili dall'utente e non devono essere interrotti per risparmiare batteria o memoria.
Caratteristiche principali:
- Mostra una notifica costante nella barra delle notifiche. L'utente deve poter vedere che il servizio è in esecuzione e potenzialmente interagire con esso.
- Il sistema ha meno probabilità di terminare un servizio in primo piano rispetto a un servizio in background o a un thread, a causa della sua alta priorità.
- Richiede un permesso speciale
FOREGROUND_SERVICE. - È usato per compiti come riproduzione musicale, tracciamento della posizione, sincronizzazione dei dati in tempo reale.
Ciclo di vita:
- Si avvia con
startForegroundService(). - Entro 5 secondi, è necessario chiamare
startForeground(notificationId, notification)per mettere il servizio in primo piano. Altrimenti, il sistema può fermare il servizio e lanciareForegroundServiceDidNotStartInTimeException. - Si termina con
stopSelf()ostopService()da un altro componente, o forzatamente dall'utente tramite la notifica. Al momento della fermata, è necessario chiamarestopForeground(bool removeNotification)per rimuovere la notifica.
Esempio di avvio:
// Ottenere permesso
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.FOREGROUND_SERVICE),
REQUEST_CODE_FOREGROUND_SERVICE
)
// Nel callback dopo aver ottenuto il permesso o se il permesso è già presente
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)
Dentro il servizio:
// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification: Notification = createNotification() // Metodo per creare la notifica
startForeground(NOTIFICATION_ID, notification)
// Qui inizia l'esecuzione del compito del servizio
return START_STICKY // O altra bandiera appropriata
}
override fun onDestroy() {
stopForeground(true) // Rimuovere la notifica all'arresto
// Pulizia delle risorse
super.onDestroy()
}