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

Posted

技术标签:

【中文标题】从通知启动时防止重新创建活动活动【英文标题】:Prevent recreating alive activity when launching from notification 【发布时间】:2020-12-31 12:16:39 【问题描述】:

android Oreo 8.0 (26 API) 开始,当使用代码启动 Activity 时,如果之前的实例没有被销毁并且仍然存在,它将不会创建新的 Activity,但在之前的 Android(例如 Marshmallow、Nougat)上它总是会创建无论如何都是新的活动。

为什么它的行为会因 Android 版本而如此不同?

我想阻止创建一个新的活动实例,并在点击通知时从 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)

【问题讨论】:

这听起来像是 Android 8 中的一个错误。使用这组 Intent 标志,它应该始终销毁所有现有活动并创建一个新实例。 【参考方案1】:

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

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

【讨论】:

是或者这个***.com/a/3227127/7767664 谢谢。这很好用。 Kotlin -> context.packageManager.getLaunchIntentForPackage(context.packageName)【参考方案2】:

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

【讨论】:

不管你为意图设置什么标志,在 Android

以上是关于从通知启动时防止重新创建活动活动的主要内容,如果未能解决你的问题,请参考以下文章

防止在关闭屏幕时重新创建 Android 活动

防止android在崩溃后重新创建活动堆栈

如何防止片段在活动重新创建时触发 onCreate onCreateView

防止 Android 重新创建已经存在的活动

从通知意图启动活动时重新创建 Android ViewModel

当蓝牙连接状态发生变化时,防止onDestroy