gpt4 book ai didi

具有 TaskStackBuilder 意外行为的 Android 通知

转载 作者:行者123 更新时间:2023-12-05 00:00:39 26 4
gpt4 key购买 nike

我正在使用 Android TaskStackBuilder 在单击通知时使用预定义堆栈创建通知。

在应用程序中我有 2 个 Activity :

  1. MainActivity 启动器
  2. Activity B

在主 Activity 中,我使用 TaskStackBuilder 和以下堆栈显示通知:[MainActivity(launcher intent), ActivityB]

当通知显示时,我拉下状态栏并单击通知,然后我会按预期看到 ActivityB,当单击后退按钮时,我也会按预期看到 MainActivity,但它的 onCreate 被调用了!!对此有解释吗?这实际上意味着 MainActivity 已经完全重启了!为什么?

MainActivity 启动模式:"singleTop"

此外,似乎在单击通知后会创建一个新的 MainActivity,而不是恢复已经打开的原始 MainActivity。 (hash不同,调用的是原来的MainActivity onDestroy!)

这样创建的通知挂起 Intent :

private fun createPendingIntent() : PendingIntent {
val stackBuilder = TaskStackBuilder.create(applicationContext)
stackBuilder.addNextIntentWithParentStack(applicationContext.packageManager.getLaunchIntentForPackage(applicationContext.packageName))
stackBuilder.addNextIntent(Intent(applicationContext, ActivityB::class.java))
return stackBuilder.getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT)
}

通知显示如下:

 private fun showNotification() {
val pIntent = createPendingIntent()
val builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Have a nice day")
.setContentText("Take care")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pIntent)

val notification = builder.build()
with(NotificationManagerCompat.from(this)){
notify(100, notification)
}
}

最佳答案

我想我找到了更好的方法!而不是使用 TaskStackBuilder,我使用了 PendingIntent.getActivities,它允许提供一组 Intents,效果更好,并且当从顶级 Activity 返回时 MainActivity 没有重新启动。

我在这里用它

private fun createPendingIntent(): PendingIntent {
val rootIntent = applicationContext.packageManager.getLaunchIntentForPackage(applicationContext.packageName)
val nextIntent = Intent(applicationContext, ActivityB::class.java)

return PendingIntent.getActivities(applicationContext, 0, arrayOf(rootIntent, nextIntent), PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT )
}

关于具有 TaskStackBuilder 意外行为的 Android 通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70666402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com