Android - 活动构造函数vs onCreate

ido*_*ize 82 java android garbage-collection oncreate android-activity

我知道Android Activities有特定的生命周期,onCreate应该被覆盖并用于初始化,但是构造函数究竟发生了什么?是否有任何情况可以/应该覆盖Activity构造函数,或者你是否应该触摸它?

我假设永远不应该使用构造函数,因为引用不会被Activities完全清理(从而妨碍垃圾收集器),那onDestroy就是为此目的.它是否正确?

Che*_*mon 32

我想不出有任何理由在构造函数中做任何事情.您永远不会直接构造活动,因此您无法使用它来传递参数.一般来说,只需在onCreate中做一些事情.

  • onCreate()阻止您使用最终字段. (72认同)
  • 但是 OnCreate 不是只调用一次,我错了吗?当我改变屏幕方向并用手返回时,每次重新加载活动时,都会调用 oncreate (2认同)
  • @fercis onCreate 每个实例只调用一次我相信。旋转设备时,该 Activity 实例将被销毁并创建一个新实例,调用 onCreate。也就是说,我很确定你不能在 onCreate 中实例化 final 字段,因为 Java 不知道 onCreate 只会被调用一次(实际上,你可以在你的代码中再次调用它 - 会发生不好的事情,但它仍然会编译),因此实例化最终字段的唯一方法是在构造函数中。 (2认同)

Arc*_*ano 7

像Gili的评论所说的那样,把事情放在构造函数中的一个很好的理由是使用final字段.

但是,如果你在构造函数中初始化东西,那么对象的生命周期会稍微长一点,尽管我没有多想,因为onCreate之后不久就会调用它.

虽然这是对我的理想,我一定要避免的构造函数活动成员的初始化和依赖onResume(),并onPause()为我的应用程序正在处理的资源.

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

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

  • 他们会有一个"关闭"方法,你必须在适当的时间调用(onResume或onPause)

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

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

  • @RichieHH更长的阿基米德只是说构造函数在onCreate()之前被调用,所以无论做什么,在活动被销毁时都会持续(稍微)长一些 (2认同)

小智 6

我现在处于需要覆盖构造函数的情况.事实上,我有一些具有相同结构的活动.因此,我将创建一个"Master"活动而不是创建许多活动,而其他活动将继承此活动.所以我需要覆盖子活动的构造函数,以便能够初始化将在oncreate方法中使用的一些变量.

用两个词来说,构造函数可以让你模拟一个可以通过继承重用的"materactivity"!

  • 我知道这是旧的,但是在onCreate()中实现超级字段实例化的好处是什么.无论如何,你将从孩子那里调用super.onCreate(). (15认同)