从通知启动时防止重新创建活动活动
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以上是关于从通知启动时防止重新创建活动活动的主要内容,如果未能解决你的问题,请参考以下文章
如何防止片段在活动重新创建时触发 onCreate onCreateView