2013-06-04 38 views
10

Android documentation we have生命周期方法的Android实现可以在做任何工作之后调用超类实现吗?

注意:您实现这些生命周期方法必须做任何工作前的超类实现随时调用 ...

但我已经看到了其中的代码放置的情况下

@Override 
protected void onPause() { 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onPause(); 
} 

:超类方法,特别是对于像的onPause(),的onStop(),的onDestroy()的方法,例如后3210

这两种方式都有效。那么,在调用超类方法之后将代码放在o之前有什么区别?什么是正确的方法?

回答

15

直接从CommonsWare的this answer复制。因此,更好地给他给予好评

方法,你会覆盖组件创建 (onCreate()onStart()onResume()等)的一部分,你应该链 超作为第一个发言,以确保Android有它的 机会做你的工作之前,你试图做一些事情依赖 完成这项工作。那些成分破坏 (onPause()onStop()onDestroy()等)的一部分

方法你重写,你应该先和链做你 工作的超类的最后一件事。那样的话,在 的情况下,Android会清理你的工作所依赖的事情,你会首先完成你的工作。

方法,返回比voidonCreateOptionsMenu()等)以外的东西,有时你链中的return语句,超 ,假设你不是专门做 的东西,需要强制一个特定的返回值。

其他一切 - 如onActivityResult() - 取决于您,在整个 。我倾向于作为第一件事链接到超类,但除非你遇到问题,否则链接应该没问题。

但是,如果没有依赖关系,那么在你想要的任何地方调用超类方法。

6

当我感兴趣这个问题,我发现这条规则:

during any kind of initialization, let the super class do their work first; 
during any kind of finalization, you do your work first 

这是合乎逻辑的)

1

根据Java的标准和最佳实践,在super调用应该先走了。我相信这样做的原因是,如果你没有这样做,那么可能需要在super中完成那些会导致代码出现问题的工作。

但是,我在拨打super之前完成了工作,并没有遇到任何问题。

我没有任何框架的例子,但我有一个BaseActivityextends Activity和我所有的Activities延伸BaseActivity。我有几个方法需要在这些子类中实现。如果我不先打电话给super,那么有些变量不会被初始化,所以我会得到NPE s

相关问题