从通知启动时防止重新创建活着 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")
从 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")