我对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个活动链,该怎么办。第一个仍然没有销毁吗?
答案 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,将从堆栈中弹出当前活动并完成。
使用我在顶部共享的相同网址:
注意:可以一次在后台执行多个任务。然而, 如果用户同时运行许多后台任务,则 系统可能开始破坏后台活动,以便 恢复内存,导致活动状态丢失。