Java 调用startActivity(新的意图(上下文,activityA.class)会创建activityA的另一个实例吗?

Java 调用startActivity(新的意图(上下文,activityA.class)会创建activityA的另一个实例吗?,java,android,android-activity,Java,Android,Android Activity,假设我有activityA(启动程序活动),我从这里开始activityB。此时activityA在活动堆栈上。现在从activityB调用startActivity(新意图(上下文,activityA.class))。 我的问题是:它会创建另一个activityA实例或重新创建activityA?它会创建一个新的activityA实例。如果要避免activityA启动两次,可以使用此标志: intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRON

假设我有activityA(启动程序活动),我从这里开始activityB。此时activityA在活动堆栈上。现在从activityB调用
startActivity(新意图(上下文,activityA.class)
)。
我的问题是:它会创建另一个activityA实例或重新创建activityA?

它会创建一个新的activityA实例。

如果要避免activityA启动两次,可以使用此标志:

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
如果在传递给Context.startActivity()的意图中设置此标志,则如果已启动的活动正在运行,则该标志将导致该活动被带到其任务历史堆栈的前面


如果您想使用已有的活动实例,并且还想刷新该活动中的某些数据,则无需重新创建该活动,而是将刷新数据逻辑移动到onStart()中,因为在使用现有实例时,将首先调用onStart(),而不是onCreate()

首先调用finish()方法关闭活动B并避免创建新的activityA实例

          @Override
        public void onStart() {
            super.onStart();
            refreshData();
     
    }

//If you can not call refreshData() in onStart(),try below code

Intent intent=new Intent(ActivityA.this,ActivityB.class);
startActivity(intent);
finish(); //this method will clear ActivityA instance from stack.

then create new instance of Activity A from B using intent.

要完成B并重新创建A的实例(您在注释中说过要执行的操作),请执行以下操作:

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

这将完成B并完成A的现有实例,然后创建A的新实例。

Nice,但我需要重新创建activityA。是否要重新创建activity以刷新数据或获取某些内容?@MIKE087重置activityA中的所有数据并获取新的SharedReferences值。我需要重新创建activityA或完成act的旧实例ivityA并创建activityA的另一个实例。我的刷新数据逻辑不能在onStart()中。在startActivity B之后,是否尝试过finish()要关闭A?@Mikeo87No,因为我不想总是完成活动A。这取决于用户在活动B中做了什么。它会创建一个新的A实例。我在您对其他答案的评论中看到,您希望这样做。但是,这可能会给您带来麻烦,因为当A再次启动B时,它将创建一个新的B实例,然后您将返回到A并创建一个新的A实例,依此类推。很快你就会有几十个A和B实例。这听起来像是一个非常糟糕的体系结构。不,这不是我想要的。我不想创建另一个activityA实例。我只想在用户单击activityB中的按钮时完成activityB并重新创建activityA。为你添加了一个基于在这个评论上。是的,这正是我所做的。它正在工作,但是,我不知道我是否可以相信这个标志在所有版本的android中总是重新创建activityA。我有点偏执XD。我在考虑使用这个标志,并添加一些额外的签入
onPause()
onResume()
的活动。但我不知道我是否会白白牺牲性能。不,你很好。它在所有Android版本上都能正常工作。这是一个有文档记录的标准行为。明白了,谢谢。