我了解到AndroidActivities
具有特定的生命周期,onCreate
应该重写该生命周期并将其用于初始化,但是构造函数中到底发生了什么?在任何情况下,您也可以/应该重写Activity
构造函数,或者永远不要触摸它?
我假设永远不要使用构造函数,因为对 Activities
不会完全清除(从而妨碍了垃圾收集器),并且onDestroy
为此目的而存在。它是否正确?
我了解到AndroidActivities
具有特定的生命周期,onCreate
应该重写该生命周期并将其用于初始化,但是构造函数中到底发生了什么?在任何情况下,您也可以/应该重写Activity
构造函数,或者永远不要触摸它?
我假设永远不要使用构造函数,因为对 Activities
不会完全清除(从而妨碍了垃圾收集器),并且onDestroy
为此目的而存在。它是否正确?
Answers:
我想不出有什么充分的理由在构造函数中做任何事情。您永远不会直接构造活动,因此无法使用它来传递参数。通常,只需在onCreate中执行操作即可。
正如吉利(Gili)的评论所述,将东西放入构造函数的一个很好的理由是使用final字段。
但是,如果在构造函数中初始化事物,则该对象的寿命会更长一些,尽管我认为不会太长,因为onCreate
此后不久就会调用。
虽然这是对我的理想,我一定要避免的构造函数活动成员的初始化和依赖onResume()
,并onPause()
为资源我的应用程序处理。
因为onCreate()
我通常使用它来进行到局部变量的视图映射。尽管android-annotations已经为我做到了,所以我很少有一个onCreate()
用于Activity的方法。我仍然在Service中使用它。
但是,如果您查看成员,则可能正在初始化
他们将有一个“关闭”方法,您必须在适当的时间(onResume或onPause)调用
它们将成为视图的一部分,这意味着需要对其进行初始化,然后再调用onCreate。
它们是常量,无论如何都不需要放在构造函数中,只需一个静态final即可。这包括可以由静态块初始化的Paint和Path常量
我现在遇到一个需要重写构造函数的案例。实际上,我有一些具有相同结构的活动。因此,我将创建一个“主”活动,而不是创建许多活动,其他活动将继承该活动。因此,我需要重写子活动的构造函数,以便能够初始化将在oncreate方法中使用的一些变量。
用两个词,构造函数使您模拟可以被继承重用的“ masteractivity”!
当您的活动将具有自定义参数或要跟踪从其继承的类的调用时,您需要覆盖构造函数。
startActivityForResult
我必须在我的自定义组件中包含一个私有构造函数,即使该活动将永远不会启动并且没有可见元素,我也只将其用于结果。