【问题标题】:Launching activity from notification , app is going through latest activity onResume从通知启动活动,应用程序正在通过最新活动 onResume
【发布时间】:2018-01-19 10:11:21
【问题描述】:

我对通知有疑问。从通知中启动正确的活动一切正常。

问题是当从通知启动新活动并且应用程序一直在后台时。然后首先加载最新的活动(在 Resume() 上),然后加载预期的活动。在onResume 我正在检查会话到期。并且当它的过期用户将被带到登录时。在最新的活动中,我没有额外的通知。

在打开通知并直接进入预期活动时,是否有可能跳过最新活动onResume

    PendingIntent createContentIntent(Context appContext, NotificationData data) {
    Intent notificationIntent = createNotificationIntent(appContext, data);
    if (notificationIntent == null) {
        notificationIntent = new Intent();
    }
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    Bundle extras = createBundle();
    extras.putSerializable(EXTRA_NOTIFICATION_DATA, data);
    notificationIntent.putExtras(extras);

    return createPendingIntentActivity(appContext, notificationIntent);
}

【问题讨论】:

  • 想补充一点,似乎是从锁定屏幕打开通知时发生的。否则打开正确的活动而不恢复上一个活动。

标签: android android-intent android-notifications


【解决方案1】:

修改您的新活动清单以包含自定义任务关联性,并考虑将 launchMode 更改为 singleTop 以防止创建活动重复:

<activity
            android:name=".your_activity"
            android:launchMode="singleTop"
            android:taskAffinity=":task_2"/>

还在您的启动意图中包含Intent.FLAG_ACTIVITY_NEW_TASK

【讨论】:

  • 我会试一试,让您知道效果如何。感谢您的建议:)
  • 我使用了这种方法,现在当我点击通知时,应用程序的新实例已打开。
【解决方案2】:

您遇到的问题是,Android 将您现有的任务置于前台,然后(显然)在从 Notification 创建 Activity 之前恢复任务中的顶部 Activity。这听起来像是一个 Android 错误。

无论如何,要解决这个问题,您可以尝试让NotificationActivity 启动到不同的任务中。为此,请在Notification 启动的Activity 上设置taskAffinity=""。由Notification 启动的Activity 然后必须启动另一个Activity,它将与您的应用程序的其余部分一起在任务中运行。希望这一切都会在手机解锁后发生,这样您就不会看到这个onResume() 问题。

如果您需要更多帮助,请发布来自 createNotificationIntent()createPendingIntentActivity() 的代码以及清单的相关部分。

【讨论】:

  • 感谢您的回答。但是,当我检查正在运行的应用程序时,这种实现似乎会给我一个以上的应用程序实例。但进一步调查这个问题似乎这可能是正常的活动周期。我在想我能做什么,就是我要把检查我的会话的代码从恢复中移开,并正确实现 onSavedInstanceState 并将会话控制移到 onCreate 和请求中。所以我不会在 onResume 状态下被打断,而是会被引导到预期的活动。
  • 是的,你将不得不尝试让它以你想要的方式工作。您可以让通知Activity 短暂存在,这样它只会在正常的应用程序任务中启动正确的Activity,然后消失。您还应该将android:excludeFromRecents="true" 添加到该Activity 的清单文件中。这样一来,“最近的应用”列表中就不会出现多个实例。
  • 谢谢...打算试试,但我认为应用程序应该能够继续正常工作。具有短暂状态 - 应用程序未运行并且您将打开通知的情况下,如果您将其置于后台,该任务将消失。而且很混乱。
  • 你误会了。单击通知(如果应用程序未运行)应使用NotificationActivity 启动新任务。然后,此Activity 应将所需的Activity 启动到应用程序任务中(无论您现在从Notification 使用什么Activity。这将在实际应用程序任务中启动一个Activity,该任务将显示在列表中最近的任务。我只是建议您使用这个两步过程来解决 Android 将现有任务带到前台并不必要地调用 onResume() 的错误。
  • 哦,我现在明白了..打算尝试这样实现:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多