Ouvrir une Activity depuis une notification sans recréer d’instance
💡 Sujet
Lorsqu’on clique sur une notification, Android peut recréer une nouvelle instance de l’Activity,
même si elle est déjà en arrière-plan.
Pour éviter cela et réutiliser l’instance existante, il faut ajouter des flags spécifiques à l’intent.
⚙️ Exemple
val notificationIntent = Intent(this, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
}🧱 Construction de la PendingIntent
Puis, utiliser cet Intent pour construire la PendingIntent de la notification :
val pendingIntent = PendingIntent.getActivity(
this,
0,
notificationIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)
val notification = NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Ma Notification")
.setContentText("Clique pour revenir à l'application")
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.build()🧩 Explication des flags
FLAG_ACTIVITY_CLEAR_TOP
➜ Si une instance de l’Activity existe déjà dans la pile, toutes les autres au-dessus sont supprimées.
L’Activity existante est alors ramenée au premier plan.
FLAG_ACTIVITY_SINGLE_TOP
➜ Si l’Activity au sommet de la pile est déjà celle qu’on veut lancer,
elle n’est pas recréée : elle reçoit simplement l’intent via onNewIntent().
✅ En combinant ces deux flags, le clic sur la notification ramène l’application au premier plan sans la recréer si elle était déjà en arrière-plan.
🧩 Résumé
- 🧱
FLAG_ACTIVITY_CLEAR_TOP: nettoie la pile d’activités au-dessus de celle existante. - 🔁
FLAG_ACTIVITY_SINGLE_TOP: réutilise l’instance si elle est déjà au sommet. - ✅ Ensemble, ils évitent la création d’une nouvelle
Activityquand on clique sur une notification. - 💡 À utiliser pour rouvrir l’app depuis une notification sans restart.