0

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

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

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

编辑1:我在某些地方读到,活动被放入其中有堆栈,因此下次它们启动并运行得更快,但是当配置发生变化时呢?是否必须调用构造函数和 oncreate 方法?

4

3 回答 3

0

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

于 2011-10-20T09:07:32.830 回答
0

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

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

我绘制了一个 UML 图来描述Android 活动的生命周期

于 2011-11-30T15:54:56.153 回答
-2

因此,没有理由让构造函数调用活动,除非你有带参数的构造函数(无论如何,onCreate 都会为我们调用它......)。然而基本上它看起来像一个 java 的东西 onCreate 可能调用 activties 的默认构造函数,它是

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

使用带有参数的构造函数尝试相同的操作

public ActivityName(String s){}// This wouldn't be call unless you explicitly call it.

希望这会有所帮助,

不过,我会等待更多专家的答案:)


编辑:因此,当您旋转调用 onCreate 的手机时,它将再次创建,并且 onCreate 可能会调用默认构造函数来调用您的活动实例:) ...我之前忘了提及这一点。

于 2011-10-20T09:06:48.913 回答