【问题标题】:How to come back to First activity without its onCreate() called如何在没有调用 onCreate() 的情况下返回第一个活动
【发布时间】:2015-12-10 07:16:50
【问题描述】:

我有 3 个活动。活动 A、活动 B、活动 C。 这是流程 A->B->C。 现在我想从 C 进入活动 A。(即 C->A)而不需要调用活动 A 的 onCreate()。

到目前为止,我的代码是:但它会调用 ActivityA 的 onCreate()。 我想调用 Restart()。

Intent intent=new Intent(ActivityC.this,ActivityA.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish(); 

【问题讨论】:

  • 我不知道如何避免调用onCreate 但是你可以放一个 flag (一旦它真的跳过onCreate方法使用return ;)
  • 您可以将extra 添加到您的intent 中,然后在onCreate 中检索它并编写有关代码的条件,在这种情况下不应该执行。
  • android 片段是最好的选择
  • 从 B 移动到 C 时,完成 B。现在,当您完成 C 时,您将默认返回 A,并且不会调用 onCreate。
  • @Rohit5k2 我在这里有一个条件,我不能去 B 。(在实际情况下,我有更多 10 个活动)所以不可能在每个人上都加上完成语句跨度>

标签: android android-activity navigation


【解决方案1】:

两种情况:

  1. 如果您想让其他活动保持活动状态并且只想将 A 放在前面,只需使用意图标志 FLAG_ACTIVITY_REORDER_TO_FRONT。

  2. 如果您不想清除所有活动并希望 A 的现有实例位于顶部,请使用意图标志 FLAG_ACTIVITY_CLEAR_TOP 和 FLAG_ACTIVITY_SINGLE_TOP。

注意:如果您只使用 FLAG_ACTIVITY_CLEAR_TOP,则会调用 onCreate。

【讨论】:

    【解决方案2】:

    在活动声明的清单中保留android:launchMode="singleTask"

    一个带有singleTask launchMode的Activity在系统中只允许有一个实例 如果实例已经存在,我不会调用“onCreate”,它将调用“onNewIntent”方法。 请参阅http://androidsrc.net/android-activity-launch-mode-example/ 以更好地了解启动模式。

    【讨论】:

      【解决方案3】:

      虽然将启动模式设置为singleTask 会起作用,但不鼓励使用该启动模式。 documentation for launch mode 表示 singleTask 是“不推荐用于一般用途”。

      可以使用 Intent 标志 FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOP 来实现所需的行为:

          Intent intent=new Intent(ActivityC.this,ActivityA.class);
          intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
          startActivity(intent);
          finish();
      

      Activity A 不会被重新创建,并将通过onNewIntent() 接收意图。

      【讨论】:

      • 我可以用Intent.FLAG_ACTIVITY_CLEAR_TOP确认,onCreate是调用,Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP,onNewIntent是调用。我不知道为什么会这样,文档中没有提到。我认为FLAG_ACTIVITY_CLEAR_TOP 应该触发 onNewnIntent。
      【解决方案4】:

      对 Activity A 使用 SingleTask 启动模式。
      新意图将被传递到现有实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2015-01-15
        相关资源
        最近更新 更多