Android:在活动中 onStart()、onStop()、onDestroy() 的开头或结尾调用 super()?

Posted

技术标签:

【中文标题】Android:在活动中 onStart()、onStop()、onDestroy() 的开头或结尾调用 super()?【英文标题】:Android: Call super() at the beginning or end of onStart(), onStop(), onDestroy() in activity? 【发布时间】:2012-08-09 03:14:11 【问题描述】:

我在活动的onStart()onStop()onDestroy() 的哪个位置调用super.onStart()super.onStop()super.onDestroy()

【问题讨论】:

通常,首先调用基类,然后再继续处理活动中 onXXXX() 方法中的任何内容。 What is the correct order of calling superclass methods in onPause, onStop and onDestroy methods? and Why?的可能重复 【参考方案1】:

这是我调用这些超级方法的方式:

OnCreate():绝对是第一件事。 OnDestroy():最后一件事。 OnStop():最后一件事。

但是,对于最后两个,无论您在哪里称呼它们(大多数情况下)。所以有些人更喜欢把它们放在第一位以保持一致。

【讨论】:

为什么不遵守 Java 的规则?我的直觉说,如果您首先在 onDestroy/onStop 中调用 super(),那么某些(基本的东西)将不再存在,并且在“清理”时可能会导致问题,但是,正如@Tomer 所说,那将违反 Java 规则。一般来说,遵守 Java 规则是有充分理由的,即使我不了解特定规则。 这就是我最后打电话给super.onStop()super.onDestroy() 的原因。我想在系统清理他之前清理我的东西。但是,正如我所说,在大多数情况下谁先清理并没有区别。当然,您可以遵循 java 规则并忽略您的胆量 :-)【参考方案2】:

一开始我会调用 super,我可能会有基类 在我做派生的工作之前完成它的工作,就像 Java 中的规则

【讨论】:

这种方法有充分的理由。例如,我使用 EventBus 在基 Activity 类中“注册”和“取消注册”订阅者。鉴于在基类中调用了“unregister”,因此需要在派生类的 onStop 中调用“super”,因此它停止接收事件,然后继续清理其他任何内容。

以上是关于Android:在活动中 onStart()、onStop()、onDestroy() 的开头或结尾调用 super()?的主要内容,如果未能解决你的问题,请参考以下文章

活动和片段之间的生命周期

重写onStart()函数

android之活动状态生存期启动模式

活动何时可见?在 onStart() 或 onResume() 之后?

原生android——认识activity

无法开始活动