【问题标题】:How can I clear activity stack and start only one activity?如何清除活动堆栈并仅启动一项活动?
【发布时间】:2021-07-06 04:16:44
【问题描述】:

我使用这些标志启动了下一个活动以清除后台堆栈。

addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)

也尝试过

addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)

我也添加了这个。

addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

但是所有的结果都是这样的。

D/activity-stack: idx: 0
     num: 1, base-name: com.example.ui.result.ResultActivity, top-name: com.example.ui.result.ResultActivity
D/activity-stack: idx: 1
     num: 1, base-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity, top-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity
D/activity-stack: idx: 0
     num: 1, base-name: com.example.ui.result.OrderActivity, top-name: com.example.ui.result.OrderActivity
D/activity-stack: idx: 1
     num: 1, base-name: com.example.ui.result.ResultActivity, top-name: com.example.ui.result.ResultActivity
D/activity-stack: idx: 2
     num: 1, base-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity, top-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity
D/activity-stack: idx: 0
     num: 1, base-name: com.example.ui.result.PaymentActivity, top-name: com.example.ui.result.PaymentActivity
D/activity-stack: idx: 1
     num: 1, base-name: com.example.ui.result.OrderActivity, top-name: com.example.ui.result.OrderActivity
D/activity-stack: idx: 2
     num: 1, base-name: com.example.ui.result.ResultActivity, top-name: com.example.ui.result.ResultActivity
D/activity-stack: idx: 3
     num: 1, base-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity, top-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity
D/activity-stack: idx: 0
     num: 1, base-name: com.example.ui.result.CompleteActivity, top-name: com.example.ui.result.CompleteActivity
D/activity-stack: idx: 1
     num: 1, base-name: com.example.ui.result.OrderActivity, top-name: com.example.ui.result.OrderActivity
D/activity-stack: idx: 2
     num: 1, base-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity, top-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity

如您所见,它只清除了最旧的一个。怎样才能清楚的清除backstack?

我的期望是:

D/activity-stack: idx: 0
     num: 1, base-name: com.example.ui.result.Completectivity, top-name: com.example.ui.result.CompleteActivity
D/activity-stack: idx: 1
     num: 1, base-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity, top-name: com.google.android.apps.nexuslauncher.NexusLauncherActivity

【问题讨论】:

  • 每次调用新活动后,您是否尝试过finish() 方法?如果调用新的活动,这将不会跟踪或允许用户返回到以前的活动
  • 我需要考虑后按哪个是应用程序需要返回上一个屏幕,所以我不应该每次都调用finish()。
  • 如果您没有 或 FLAG_ACTIVITY_NO_HISTORY,请尝试其中一种
  • 好吧,那个活动不会在堆栈上。它需要在堆栈中。我只需要清理堆栈而不绕道解决方案。
  • @ZaidZakir,对不起,我在清单中设置了 singleInstance .. 代码工作正常。

标签: android android-intent android-activitymanager


【解决方案1】:

实际上,我的代码没有任何问题。但是我将 singleInstance 设置为那个活动,所以它不起作用。

因为singleInstance似乎优先级更高,所以不会被singleTask(NEW_TASK+CLEAR_TASK or CLEAR_TOP)覆盖

【讨论】:

  • 使用特殊的启动模式singleInstancesingleTask 通常会产生比它解决的问题更多的问题。仅在非常特殊的情况下(例如创建主屏幕替换时)才需要它。
  • @David Wasser,感谢您提供的信息。
猜你喜欢
  • 2011-12-09
  • 2011-09-19
  • 1970-01-01
  • 2011-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2012-04-20
相关资源
最近更新 更多