【问题标题】:Is it possible to finish Android activities up to a certain number?是否可以完成一定数量的 Android 活动?
【发布时间】:2021-06-23 11:16:52
【问题描述】:

我知道 Android 中的这两种方法,我需要它们的“平均案例方法”。

finish() 能够完成当前活动。

finishAffinity() 能够完成当前活动及其所有父活动。

我想要一个能够完成与当前活动及其某些父项一样多的活动的方法,例如,像 finishCurrentAndParentActivities(2) 这样的组合方法将完成当前活动及其父项,仅此而已会完结的。

但不幸的是,这种方法似乎不存在,我无法掌握实现这种行为的好方法。

我可以做些什么来达到预期的行为?

【问题讨论】:

    标签: java android android-activity


    【解决方案1】:

    您可以完成所有活动回到堆栈中某个已知的Activity,如下所示:

    Intent = new Intent(this, ActivityX.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
    

    此代码将完成从堆栈顶部返回并包括ActivityX 实例的所有活动。然后它会创建一个ActivityX 的新实例并将其放在堆栈的顶部。

    您也可以这样做:

    Intent = new Intent(this, ActivityX.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
    

    此代码将完成从堆栈顶部返回(但不包括)ActivityX 实例的所有活动。它不会创建ActivityX 的新实例,但会通过调用onNewIntent() 将此Intent 传递给ActivityX 的现有实例。

    这些方法可能比能够完成一定数量的活动更有用,因为很难跟踪堆栈中有多少您希望删除。

    但是,如果您真的想实现您所描述的内容,您可以执行以下操作:

    • 使用public static(全局)变量作为您要完成多少活动的计数器

    • 将此设置为您要完成的活动数量

    • 在当前的Activity 上调用finish() 并减少变量

    • 在您的所有活动中的onResume() 中,执行以下操作:

      if (numberOfActivitiesToFinish > 0) { numberOfActivityToFinish--; 结束() }

    当每个Activity 到达堆栈顶部时,它会检查它是否应该完成,如果是,它会递减计数器并完成。不优雅,但能胜任。

    【讨论】:

      猜你喜欢
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      相关资源
      最近更新 更多