我理解Android Activities
具有特定的生命周期,onCreate
应该被覆盖并用于初始化,但构造函数中究竟发生了什么?是否有任何情况可以/应该覆盖Activity
构造函数,或者你是否应该触摸它?
我假设永远不应该使用构造函数,因为对Activities
的引用不会被完全清除(从而妨碍垃圾收集器),并且onDestroy
就是为此目的而存在的。这是对的吗?
答案 0 :(得分:32)
我无法想到在构造函数中做任何事情的任何好理由。您永远不会直接构造活动,因此您无法使用它来传递参数。通常,只需在onCreate中执行操作。
答案 1 :(得分:7)
正如Gili的评论所说,将内容置于构造函数中的一个很好的理由是使用最终字段。
但是,如果你在构造函数中初始化东西,那么对象的生命周期会稍微长一点,尽管我没有多想,因为此后不久会调用onCreate
。
虽然这违反了我的理想,但我确实避免使用构造函数来初始化活动成员,并依赖onResume()
和onPause()
来获取我的应用正在处理的资源。
对于onCreate()
,我通常使用它来查看映射到局部变量。虽然android-annotations已经为我做了,所以我的Activity很少有onCreate()
方法。我仍然在服务中使用它。
但是,如果您查看可能正在初始化的成员
他们会有一个“关闭”方法,您必须在适当的时间调用(onResume或onPause)
他们将成为视图的一部分,这意味着需要初始化然后onCreate需要被调用
它们是常量,无论如何都不需要放在构造函数中,只需要一个静态的final。这包括可以通过静态块
答案 2 :(得分:6)
我现在处于需要覆盖构造函数的情况。事实上,我有一些具有相同结构的活动。因此,我将创建一个“Master”活动而不是创建许多活动,而其他活动将继承此活动。所以我需要覆盖子活动的构造函数,以便能够初始化将在oncreate方法中使用的一些变量。
用两个词来说,构造函数让你模拟一个可以通过继承重用的“materactivity”!
答案 3 :(得分:0)
当您的活动具有自定义参数或您想要跟踪来自其继承的类的调用时,您需要覆盖构造函数。