Android – 活动构造与onCreate

我知道Android的Activities有特定的生命周期,应该重写onCreate并用于初始化,但是在构造函数中究竟发生了什么? 是否有任何情况下,你可以/应该重写Activity构造函数,或者你应该永远不要碰它?

我假设不应该使用构造函数,因为对Activities引用没有完全清理(从而阻碍垃圾收集器),并且onDestroy就是为此目的而存在的。 它是否正确?

我想不出在构造函数中做任何事情的好理由。 你永远不会直接构造一个活动,所以你不能使用它来传递参数。 一般来说,只需要在onCreate中做些事情。

我现在正在需要重写构造函数的情况。 事实上,我有一些结构相同的活动。 因此,我们不是创build许多活动,而是创build一个“主”活动,其他活动将inheritance这个活动。 所以我需要重写子活动的构造函数,以便能够初始化将在oncreate方法中使用的一些variables。

用两个字,构造函数让你模拟一个可以被inheritance使用的“masteractivity”!

在Gili的评论中提到的将构造函数放在构造函数中的一个很好的理由是final字段的使用。

然而,如果你在构造函数中初始化了东西,那么对象的使用寿命会稍微长一些,不过我不会那么认为,因为onCreate之后不久就会被调用。

尽pipe这违背了我的理想,但是我避免了构造函数来初始化活动成员,并依赖onResume()onPause()来处理我的应用程序正在处理的资源。

对于onCreate()我通常使用它来做视图映射到局部variables。 虽然android-annotations已经为我做了这个,所以我很less有一个onCreate()方法为我的活动。 我仍然在服务中使用它。

但是,如果你看看你可能正在初始化的成员

  • 他们将有一个“closures”的方法,你必须在适当的时候调用(onResume或onPause)

  • 他们将是视图的一部分,这意味着它需要被初始化,然后onCreate需要被调用

  • 它们是常量,无论如何都不需要放在构造函数中,只是一个静态的final。 这包括可以通过静态块初始化的Paint和Path常量

当您的活动将具有自定义参数或者您想要跟踪从inheritance的类的调用时,您需要重写构造函数。