【问题标题】: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 标志,它应该始终销毁所有现有活动并创建一个新实例。

标签: android android-intent android-activity android-notifications android-pendingintent


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 不管你为意图设置什么标志,在 Android
猜你喜欢
  • 2020-05-29
  • 2020-11-10
  • 2015-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多