【问题标题】:Wrong Activity launched, when launching application from recent task从最近的任务启动应用程序时启动了错误的活动
【发布时间】:2014-03-26 12:40:10
【问题描述】:

我正在创建一个接收通知的应用程序。

在打开该通知时,我正在启动活动(使用标志 FLAG_ACTIVITY_NEW_TASK 创建) 按返回键时,我正在启动主应用程序活动(带有标志FLAG_ACTIVITY_CLEAR_TOP)。

现在再次按下返回键(用于关闭应用程序)。

问题是:当我去最近的任务并打开该应用程序时,通知活动启动,而应用程序的主要活动应该启动。

谁能给我任何建议?

当我在我的 BroadcastReceiver 扩展类中收到通知时添加到 sn-p 下方 -

Intent new_intent = new Intent(context, NotificationActivity.class);
new_intent.putExtra(NotificationActivity.EXTRA_NOTIFICATION_ID, id);
new_intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(new_intent);  

在 NotificationActivity 的返回键上,我正在启动主要活动 -

Intent new_intent = new Intent(context, MainActivity.class);
new_intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(new_intent);

现在,当我按返回键从应用程序返回并再次从最近的任务启动应用程序时,它会显示 NotificationActivity。虽然它应该显示应用程序的 MainActivity。有什么我想念的吗?

【问题讨论】:

  • 请给我们更多信息,特别是发布一些相关的代码。
  • 请在您的问题中添加更多代码并对其进行编辑,不要将其发布在 cmets 中。
  • 我几乎可以理解你的问题,除了最后一句:“现在,当我通过返回键返回应用程序并再次从最近的任务启动应用程序时,它会显示 NotificationActivity。虽然它应该显示 MainActivity应用程序有什么我遗漏的吗?”你能澄清一下你的意思吗?
  • 当我从那个 FCM 接收服务方法中触发 PendingIntent 时,同样的事情发生在我身上。如果我从后台服务中触发相同的操作,则后台堆栈不会损坏,即在最近的任务选项卡中,呈现的最后一个活动实际上是我用来关闭应用程序的最后一个活动。从 FCM 触发的任何结果?

标签: android


【解决方案1】:

您应该使用这些标志启动您的 MainActivity:

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

在此之后不要忘记完成 NotificationActivity

【讨论】:

    【解决方案2】:

    当您的应用处于终止状态(最近的任务中不存在)时,您的应用后台堆栈将为空。

    现在您的应用程序堆栈有了根(活动)的概念。应用程序启动的第一个 Activity 成为应用程序回栈的根。

    当您从 NotificationActivity 和 MainActivity 按下返回时,这两个活动都将完成。现在,如果您从最近的任务启动应用程序,那么根活动将从 Back Stack 启动。

    这是一个正常的 android 行为,它总是启动 Root 来自后台堆栈的活动

    即使在 WhatsApp 中,您也会发现相同的行为。

    .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      相关资源
      最近更新 更多