【问题标题】:Using TaskStackBuilder in notification recreates an activity在通知中使用 TaskStackBuilder 会重新创建一个活动
【发布时间】:2015-11-05 11:02:43
【问题描述】:

当活动中发生某些事件时,我会向用户显示一条通知。当我创建通知时,如果我的活动被系统清除,我会使用 TaskStackBuilder 来确保我有 backstack 活动列表。我的代码如下所示:

    ...
    TaskStackBuilder builder = TaskStackBuilder.create(sContext);
    builder.addNextIntent(new Intent(context, ActivityA));
    builder.addNextIntent(new Intent(context, ActivityB));
    builder.addNextIntent(new Intent(context, ActivityC));
    PendingIntent pendingIntent = 
            builder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT)

    Notification.Builder builder = new Notification.Builder(context)
            .setContentTitle(title))
            .setContentText(notificationText)
            .setSmallIcon(getNotificationIcon())
            .setContentIntent(pendingIntent);

    builder.build();
    ...

因此,打开的活动将是最后添加的,即 ActivityC(我不希望重新创建它)。 我找到的一个解决方案是:How to make notification resume and not recreate activity? 据说我不应该使用 TaskStackBuilder,但这不是我想要的。我想从通知开始一个活动,使用 TaskStackBuilder 而不是重新创建整个活动。

有什么解决方案/建议吗?

【问题讨论】:

  • 请详细说明您想要做什么。一般来说,使用TaskStackBuilder会导致任何现有任务被重置(即:清除)并重新创建任务中的活动。
  • @DavidWasser 我在后台有一项服务可以做一些工作。它可能会持续很长时间,因此用户将离开活动并可以通过按通知返回活动。同时系统可以清理活动。这就是我使用 TaskStackBuilder 的原因。
  • 如果您只想使用通知允许用户以任何状态返回任务,那么您不需要TaskStackBuilder。见stackoverflow.com/questions/6575730/…stackoverflow.com/a/5502950/769265stackoverflow.com/questions/30544165/…
  • @DavidWasser 这看起来可行。感谢您的回答。也许您可以发布作为答案并删除-1,以便其他有类似问题的人有解决方案。再次感谢。
  • 4 年后,我遇到了这个问题。在我的情况下,@DavidWasser 建议的第三个答案似乎效果很好(使用PackageManager.getLaunchIntentForPackage())。

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


【解决方案1】:

如果您只想使用通知允许用户以任何状态返回任务,那么您不需要 TaskStackBuilder。

见:

【讨论】:

    【解决方案2】:
    TaskStackBuilder builder = TaskStackBuilder.create(sContext); 
    Intent intentForA = new Intent(context, ActivityA);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
    builder.addNextIntent(intentForA); 
    

    如果该标志已经存在,则不会重新创建活动,只会将新 Intent 传递给 onNewIntent() 方法。有关更多详细信息,请查看文档

    http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP

    【讨论】:

    • 这是大错特错。首先,使用TaskStackBuilder 否定所有这些,因为TaskStackBuilder 在开始时强制重置任务,而不管您提供什么标志。其次,在非TaskStackBuilder 的情况下,如果SINGLE_TOP 也被使用(或者如果Activity 在清单声明中具有launchMode="singleTop",则CLEAR_TOP 标志只会阻止Activity 的重新创建。
    • @DavidWasser 你对添加 SINGLE_TOP 标志是正确的。
    • @jily 正如 David Wasser 所说,如果我们使用 TaskStackBuilder,我们应用程序的整个任务将被新任务替换。所以,我不认为我们可以做任何事情来阻止活动的娱乐。但是感谢您的帮助...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    相关资源
    最近更新 更多