【问题标题】:Create new Instance Of activity by Intent every time android?每次android都按意图创建新的活动实例?
【发布时间】:2018-05-02 13:37:15
【问题描述】:

如何防止每次创建Store活动的Instance?

当我调用startActivity(new Intent(this,StoreActivity.class)) 时,它会创建新实例并调用StoreActivity 中的OnCreate 方法。我想打一次Oncreate

这可能吗?

【问题讨论】:

标签: java android android-activity


【解决方案1】:

这样做

startActivity(new Intent(
       this,StoreActivity.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP));

来自Android Documentation

public static final int FLAG_ACTIVITY_SINGLE_TOP

如果设置,如果 Activity 已经在历史堆栈的顶部运行,则不会启动它。

常数值:536870912 (0x20000000)

【讨论】:

  • 它不工作是什么意思?即使活动已打开,它是否仍在启动新实例?
  • 当我从 MainActivity 调用 storeActivity 时,在 StoreActivity 创建实例期间调用 OnCreate 方法,现在我按下了,从 Storeactivity 调用 onBackpressMethod ......我又回到了 MainActivity .. 现在它不应该被调用当我从 Main Activity 重定向到 Store Activity 时 StoreActivity 的 Oncreate 方法 .. 因为我已经创建了 StoreActivity 的实例 ..
  • 这不是它的工作原理。这违反了 Android 框架流程。你应该重新考虑你想要达到的目标。
【解决方案2】:

像这样开始你的活动:

Intent storeIntent = new Intent(this, StoreActivity.class);
storeIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(storeIntent);

它只会在第一次启动 Activity 时调用一次 onCreate(),如果 Activity 已经在运行,它只会调用 onNewIntent() 而不是创建新的 Activity 实例或调用 onCreate。

【讨论】:

    【解决方案3】:

    这是不可能的,因为每次您按下返回按钮时,都会调用 onBackPressed() 方法,这实际上会破坏您的 StoreActivity

    如果您希望此方法不破坏您的活动,只需删除或注释掉此方法中的 super.onBackPressed() 行。

    在这种情况下,当按下后退按钮时,您的 Activity 不会被销毁,但您必须使用任何其他逻辑将您的 MainActivity 置于堆栈顶部。

    【讨论】:

      【解决方案4】:

      在开始新的活动后尝试完成第一个活动, 在 Intent 命令之后添加此代码。

      完成();

      这样:

      startActivity(new Intent(this, newActivity.class));
      finish();
      

      检查此链接 Finish an activity from another activity

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-27
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多