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

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

【问题讨论】:

标签: android methods base-class


【解决方案1】:

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

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

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

【讨论】:

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

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

【讨论】:

  • 这种方法有充分的理由。例如,我使用 EventBus 在基 Activity 类中“注册”和“取消注册”订阅者。鉴于在基类中调用了“unregister”,因此需要在派生类的 onStop 中调用“super”,因此它停止接收事件,然后继续清理其他任何内容。
猜你喜欢
  • 2013-06-17
  • 2014-11-09
  • 2014-06-24
  • 2012-11-14
  • 1970-01-01
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多