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()?的主要内容,如果未能解决你的问题,请参考以下文章