【问题标题】:How to finish last N activites on stack in Android?如何在 Android 中完成堆栈上的最后 N 个活动?
【发布时间】:2021-06-05 13:55:53
【问题描述】:

我有 4 项活动:

A->B->C->D

当我从 C 转到 D 时,我想完成 B 和 C,这样当我按下后退按钮时,活动 A 会恢复。有没有简单的方法来做到这一点?

【问题讨论】:

标签: android android-activity stack onactivityresult


【解决方案1】:

使用 Intent.FLAG_ACTIVITY_CLEAR_TASK 将目标活动设置为新根。此标志应与 FLAG_ACTIVITY_NEW_TASK 结合使用

class ActivityD : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_d)
    }

    override fun onBackPressed() {
        Intent(this, ActivityA::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            startActivity(this)
        }
    }
}

您可以使用以下 adb 命令(unix shell)查看活动 stask

adb shell dumpsys activity activities | sed -En -e '/Stack #/p' -e '/Running activities/,/Run #0/p'

【讨论】:

  • 这会在启动 D 时破坏活动 A,所以当我按下返回按钮时,在活动 D 中,活动 A 将被重新创建。有没有办法简单地恢复活动 A 而无需重新创建?
  • 重写 B 和 C 活动类的 onActivityResult 方法并调用 finish() 来销毁它们。当然你应该使用 startActivityForResult 来启动 C 和 D 活动并使用 setResult 来关闭它们
猜你喜欢
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2019-03-12
相关资源
最近更新 更多