93

我知道 AndroidActivities有特定的生命周期,onCreate应该被覆盖并用于初始化,但是在构造函数中到底发生了什么?是否有任何情况下您可以/应该重写Activity构造函数,或者您永远不应该触摸它?

我假设永远不应该使用构造函数,因为Activities没有完全清除对的引用(因此妨碍了垃圾收集器),而这onDestroy就是为此目的。这个对吗?

4

4 回答 4

36

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

于 2010-07-21T20:26:02.320 回答
7

正如 Gili 的评论所说,将东西放入构造函数的一个很好的理由是使用 final 字段。

但是,如果您在构造函数中初始化事物,那么对象的生命周期会稍长一些,尽管我不认为太多,因为onCreate此后不久就会调用该对象。

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

因为onCreate()我通常用它来做视图映射到局部变量。虽然 android-annotations 已经为我做到了,所以我很少有onCreate()我的 Activity 的方法。我仍然在服务中使用它。

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

  • 他们将有一个“关闭”方法,您必须在适当的时间调用(onResume 或 onPause)

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

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

于 2013-07-19T21:46:55.717 回答
6

我现在正在处理一个需要覆盖构造函数的案例。事实上,我有一些具有相同结构的活动。因此,我将创建一个“主”活动,而不是创建许多活动,而其他活动将继承这一活动。所以我需要重写子活动的构造函数,以便能够初始化一些将在 oncreate 方法中使用的变量。

简而言之,构造函数让你模拟一个可以通过继承重用的“masteractivity”!

于 2012-01-13T23:46:03.597 回答
0

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

于 2010-07-21T18:39:20.680 回答