Activity 会根据单击后退按钮时打开的次数自行重新打开

Posted

技术标签:

【中文标题】Activity 会根据单击后退按钮时打开的次数自行重新打开【英文标题】:Activity reopens itself by the number of times it is opened while back button is clicked 【发布时间】:2018-07-30 00:32:16 【问题描述】:

让我们假设下面这样一个场景,在这个场景中,每个字母都指向一个活动,括号内的每个数字都指向打开时间,每个箭头都指向从一个到另一个的过渡

A(1) -> B(1) -> A(2)(意思是A打开,B打开,A再打开)

如果我按下返回按钮 A 会尝试再次打开

A(1) -> B(1) -> A(2) -> B(2) -> A(3) -> C(1) -> A(4)

此时,如果我按下返回按钮,我会尝试再次打开 4 次。我期望的是至少它应该打开 C(1) 然后 A(3) 然后 B(2) 然后 A(2) ...

问题在于将启动模式更改为 singleInstance 但我不明白为什么会这样?这是我第一次面临这样的问题。

<activity
    android:name="ProfileActivity"
    android:theme="@style/NoActionBarTheme">
</activity>

我在下面这样称呼它

fun launchProfileActivity(context: Activity) 
context.startActivity(
    Intent(context, ProfileActivity::class.java))

【问题讨论】:

我无法重现此行为。您是否正在修改在其他地方管理任务的方式? 我创建了这个虚拟项目来测试这种流程,它似乎可以按照您想要的方式工作。看看吧:github.com/bernardoroll/dummy-activity-stack-test 发布您的清单。您的描述难以理解。 【参考方案1】:

您可以将 finish() 用于 A 和 B 之类的活动,这些活动被重复调用多次。一旦您切换到另一个活动,这将破坏活动 A。因此,下次切换到它时,只有一个 A 实例。 在 startActivity 方法之后写 finish()。

【讨论】:

我知道,但我要问的真正问题是为什么在 A4 关闭后它不显示 C1?通常它应该显示 C1 然后显示 A3。

以上是关于Activity 会根据单击后退按钮时打开的次数自行重新打开的主要内容,如果未能解决你的问题,请参考以下文章

从 Activity 返回时如何获取最后一个 ListView 状态

根据最初检查的复选框值在后退按钮单击时重新加载 Angular 6 反应式表单

根据TextView值打开Activity

浏览器后退按钮更改动态 url 参数

使用自定义后退按钮后导航标题消失

单击后退按钮时,在 RecyclerView 中获得相同的项目位置