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

adr*_*aes 12 lifecycle android android-activity

Android文档中,我们有:

注意:在执行任何工作之前,您对这些生命周期方法的实现必须始终调用超类实现...

但我已经看到过代码放在超类方法之后的情况,特别是对于像onPause(),onStop(),onDestroy()这样的方法,例如:

@Override
protected void onPause() {
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
    super.onPause();
} 
Run Code Online (Sandbox Code Playgroud)

http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html#ownreceiver_localbroadcastmanager

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

sti*_*ike 19

直接从CommonsWare的这个答案复制.所以最好给他一个upvote

那些组件创建(的一部分方法重写onCreate(),onStart(),onResume()等),你应该链超作为第一个发言,以确保Android有它的机会来完成工作,你试图做一些事情,依靠这项工作之前,已经完成了.

那些成分破坏(部分方法重写onPause(),onStop(),onDestroy()等),你应该先和链做你的工作,以超作为最后一件事.这样,如果Android清理了您的工作所依赖的东西,您将首先完成您的工作.

返回除void (onCreateOptionsMenu()等)之外的其他东西的方法,有时你会链接到return语句中的超类,假设你没有专门做一些需要强制特定返回值的东西.

其他一切 - 比如onActivityResult()- 总体上取决于你.我倾向于链接到超类作为第一件事,但除非你遇到问题,以后链接应该没问题.

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


Ant*_*ton 6

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

during any kind of initialization, let the super class do their work first; 
during any kind of finalization, you do your work first
Run Code Online (Sandbox Code Playgroud)

这是合乎逻辑的)