【问题标题】:How can I kill an activity - Android我怎样才能杀死一个活动 - Android
【发布时间】:2014-04-05 21:46:02
【问题描述】:

我使用 startActivity(Intent) 在我的 Android 应用程序中创建一个新活动。

是否可以终止其中一项活动,如果可以,如何终止?

我真正想做的是,假设我同时运行 4 个活动,按此顺序打开

Activity1 -> Activity2 -> Activity3 -> Activity4

当用户按下后退按钮时,而不是去

Activity4 -> Activity3 -> Activity2 -> Activity1 -> 关闭应用程序

我想要这样的

Activity4 -> Activity1 -> 关闭应用程序

【问题讨论】:

  • 有很多方法可以实现这一点。你试过搜索吗?

标签: android android-activity


【解决方案1】:

当您开始序列中的下一个活动时,您可以使用 finish() 方法关闭活动 2 和 3。这将使您从 4 到 1,也可以从 3 到 1。

【讨论】:

    【解决方案2】:

    是的,你可以这样做。

    将此标签添加到清单中的 Activity3 和 Activity2:

    android:noHistory="true"
    

    这样,这些活动就不会被添加到 backStack 中,因此按下 Activity4 上的后退按钮会使用户转到 Activity1。 (活动 3 和 2 中也会发生同样的情况。)

    【讨论】:

      【解决方案3】:

      第一个 Activity1 应该在 singleTop 的清单中设置一个特殊的launchMode。这将确保如果 Activity1 已经位于堆栈顶部,则不会创建另一个版本。

      对于您需要特殊后退按钮行为的每个活动,您应该覆盖onBackPressed()。在 onBackPressed 内部实现以下代码:

          public void onBackPressed () {
                  Intent goBackTo1 = new Intent(this, Activity1.class);
                  goBackTo1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                  startActivity(goBackTo1);
          }
      

      上面的代码将启动 Activity1,但在启动之前它会清除历史堆栈中 Activity1 之后的所有活动。发生这种情况时,Activity1 将在方法 onNewIntent(Intent intent) 中将新的 Intent 传递给已经运行的 Activity1。

      前:

          Activity1->Activity2->Activity3->Activity4
      

      如果他们实现了上面的代码,从 2,3 或 4 调用 onBackPressed 时会变成这个。您可能需要考虑一个基本活动类以不重复代码。

          Activity1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-04
        • 2011-08-20
        • 2017-01-15
        • 1970-01-01
        • 2010-11-18
        • 2015-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多