Middle
Qu'est-ce qu'un service en arrière-plan (service au premier plan) dans Android?
sobes.tech IA
Réponse de l'IA
Le service en premier plan (foreground service) est un type de service dans Android qui a une priorité élevée et est visible pour l'utilisateur. Il exécute des tâches perceptibles pour l'utilisateur et ne doit pas être interrompu pour économiser la batterie ou la mémoire.
Caractéristiques clés :
- Affiche une notification constante dans la barre de notifications. L'utilisateur doit pouvoir voir que le service est en cours d'exécution et potentiellement interagir avec lui.
- Le système a moins de chances de tuer un service en premier plan par rapport à un service en arrière-plan ou un thread, en raison de sa haute priorité.
- Nécessite une permission spéciale
FOREGROUND_SERVICE. - Utilisé pour des tâches telles que la lecture de musique, le suivi de localisation, la synchronisation de données en temps réel.
Cycle de vie :
- Démarre avec
startForegroundService(). - Dans les 5 secondes, il faut appeler
startForeground(notificationId, notification)pour mettre le service en premier plan. Sinon, le système peut arrêter le service et lancerForegroundServiceDidNotStartInTimeException. - Se termine avec
stopSelf()oustopService()depuis un autre composant, ou de force par l'utilisateur via la notification. Lors de l'arrêt, il faut appelerstopForeground(bool removeNotification)pour supprimer la notification.
Exemple de démarrage :
// Obtenir la permission
ActivityCompat.requestPermissions(
this,
arrayOf(Manifest.permission.FOREGROUND_SERVICE),
REQUEST_CODE_FOREGROUND_SERVICE
)
// Dans le callback après avoir obtenu la permission ou si la permission est déjà accordée
val serviceIntent = Intent(this, MyForegroundService::class.java)
ContextCompat.startForegroundService(this, serviceIntent)
Dans le service :
// MyForegroundService.kt
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
val notification: Notification = createNotification() // Méthode pour créer la notification
startForeground(NOTIFICATION_ID, notification)
// Ici commence l'exécution de la tâche du service
return START_STICKY // Ou un autre drapeau approprié
}
override fun onDestroy() {
stopForeground(true) // Supprimer la notification lors de l'arrêt
// Nettoyage des ressources
super.onDestroy()
}