活动生命周期混乱

时间:2011-10-20 08:57:56

标签: android android-activity lifecycle activity-lifecycle

活动的生命周期记录在许多地方,但我找不到我需要的东西。这是我的活动,它有一个构造函数和onCreate方法。在我的项目中,我也记录了这种方法,每当我从纵向到横向时,我都会看到两种方法都被执行了。为什么我的构造函数被调用?不是堆栈中的活动,我的活动实例是在内存中,所以当配置发生变化时,只发生oncreate和keepistancestate(当然是onResume)。为什么每次调用构造函数,谁在调用?是否每次从配置中更改某些内容时,都会保证调用两个方法(一个接一个地,以相同的顺序)。

public TestActivity()
{
    super(R.menu.main_menu, tag);
}
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

我正在玩我的示例应用程序,但我想知道更多细节,有人可以在构建器包含时澄清我的情景吗?,我创建了很多关于生命周期的文档但没有解释构造函数时的细节包括

EDIT1: 我在某些地方读到,存在堆栈,因为下次启动和运行得更快,但配置何时更改?是否必须调用构造函数和oncreate方法?

3 个答案:

答案 0 :(得分:0)

轮换后,您的活动将重新启动完成。您可以使用清单中的android:configChanges="keyboardHidden| orientation"来阻止这种情况。

答案 1 :(得分:0)

当@rekire回答时,活动会在屏幕旋转时重新启动。这里重启意味着框架创建了活动的另一个实例,这就是调用活动类的构造函数然后调用onCreate()的原因。新的活动实例将替换最终由GC回收的旧活动实例,如果其他人不持有它的参考。

如果您想避免在屏幕旋转时重新启动活动,请阅读此question

我画了一个UML图来描述Android activity life cycle

答案 2 :(得分:-2)

因此没有理由让构造函数调用活动,除非你有使用params的构造函数(onCreate无论如何都为我们调用它......)。但是基本上它似乎是一个java事物onCreate可能会调用activties的默认构造函数

public ActivityName(){} // This might get call because onCreate somewhere under the hood invoking Activity :)

使用像

这样的param构造函数尝试相同的事情
public ActivityName(String s){}// This wouldn't be call unless you explicitly call it.

希望这会有所帮助,

我会等待更专业的答案:)

<小时/> 编辑:所以当您旋转调用onCreate的手机时,它会再次被创建,onCreate可能会调用默认构造函数来调用您的活动实例:)...我之前忘记提及。