从通知启动时防止重新创建活着 activity

Prevent recreating alive activity when launching from notification

从 Android Oreo 8.0 (26 API) 使用代码启动 activity,如果之前的实例不是,它不会创建新的 activity销毁并仍然存在,但在之前的 Android(例如 Marshmallow、Nougat)上,它总是会在任何情况下创建一个新的 activity。

为什么它的行为因 Android 版本而异?

我想阻止创建 activity 的新实例,并在单击通知时将现有的(如果它仍然存在)从 Android 23 (Marshmallow) 开始放在前面。目前它只适用于从 Oreo Android (26)

开始
val intent = Intent(this, TestActivity::class.java).apply {
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}

val pendingIntentt = PendingIntent.getActivity(
    this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT
)

val ... = NotificationCompat.Builder(this, channelId)
    ...
    .setContentIntent(pendingIntent)

你可以尝试使用Intent.FLAG_ACTIVITY_SINGLE_TOP标志

如果您想将应用程序的现有实例带到前台,或者如果应用程序不是 运行(前台或后台)则创建一个新实例,那么只需使用启动 Intent 在你的 Notification:

val intent = getPackageManager.getLaunchIntentForPackage("my.package.name")