澄清Android活动onPause和onRestart

时间:2019-06-20 11:29:06

标签: java android android-intent android-lifecycle

我对Android中的活动生命周期有疑问。当我有这样的代码(具有正确的名称)

 newActivityButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), NextActivity.class);
                intent.putExtra("Info",correctInfo);
                startActivity(intent);
            }
        });

然后“ NextActivity”出现在前台。但这是否意味着“ MainActivity”已停止?根据下图,“ MainActivity”不再可见,因此也已停止?

编辑: 如果我有3个活动链,该怎么办。第一个仍然没有销毁吗?

Activity lifecycle graph

3 个答案:

答案 0 :(得分:0)

仅当您使用finish()或相关方法隐式完成活动时,或者如果出于某种必要原因,大多数情况下与设备内存不足有关的活动,系统将销毁这些活动,则这些活动将被销毁他们在后台。如果之前的任何事件均未发生,则在后台进行的活动将达到其生命周期的onStop()状态,直到再次回到前台为止,如图所示。

请回答您的问题,以防万一:

A-> B-> C如果您不对它们中的任何一个调用完成,并且系统没有在后台终止任何活动,则A和B都将停止,但不会被破坏。

答案 1 :(得分:0)

MainActivity将在它变得不可见并且另一个活动进入前台后立即停止。如果一系列活动接连启动,那么所有活动都将处于停止状态(除非系统销毁该活动以释放内存和资源)。

答案 2 :(得分:0)

Please read this article on back stack and task management

在android中,活动或任务(活动的集合)以堆栈的形式排列,称为“后堆栈”。

当前活动启动新活动时,新活动将被推到堆栈的顶部并获得焦点。先前的活动也保留在堆栈中,但是它处于停止状态,而系统保留了其用户界面的状态,因此可以恢复它。同样,如果此新活动再次创建另一个活动,则新创建的活动将到达堆栈顶部,而当前活动将变为停止状态。

一旦按下后退按钮,顶部的活动即完成并从堆栈中弹出,并且堆栈中的下一个活动以已保存的实例状态恢复,因此感觉就像恢复了它的原处。< / p>

对于一个链,假设您有三个活动,即A,B和C。A启动B,B启动C。因此,当C处于焦点位置时,您的A和B活动将处于停止状态(但仍处于后退状态)堆)。您可以按C并继续按B,然后按B并继续按A。如上所述,一旦按Back,将从堆栈中弹出当前活动并完成。

使用我在顶部共享的相同网址:

  

注意:可以一次在后台执行多个任务。然而,   如果用户同时运行许多后台任务,则   系统可能开始破坏后台活动,以便   恢复内存,导致活动状态丢失。