这两个陈述之间有什么区别?
1.超级类方法调用第一行
2.super类方法正在调用最后一行
〔实施例:
@Override
protected void onStart() {
super.onStart();
FlurryAgent.onStartSession(this, AppConstants.FLURRY_API_KEY);
RocqAnalytics.startScreen(this);
AppEventsLogger.activateApp(this);
}
@Override
protected void onStart() {
FlurryAgent.onStartSession(this, AppConstants.FLURRY_API_KEY);
RocqAnalytics.startScreen(this);
AppEventsLogger.activateApp(this);
super.onStart();
}
答案 0 :(得分:2)
通过将super.onStart()
放在被覆盖函数的顶部,您可以告诉程序执行任何{/ 1}}代码来自超级 之前的任何代码代码运行。
通过将onStart()
放在被覆盖函数的末尾,您可以告诉程序在之后的任何一个超类中执行任何super.onStart()
代码代码运行。
这有点重要,因为即使是原始的onStart()
也会在Activity
中执行its own initialization的某些操作。例如,应用程序生命周期回调在onStart()
中调用。因此,如果您想在应用程序收到您的活动已启动的通知之前执行某些操作,则必须在调用Activity.onStart()
之前执行此操作。
如果您想在框架有发言权之前或之后进行一些自己的初始化,那么您调用super.onStart()
的操作顺序依赖于这一事实。根据经验,我总是首先初始化框架(即首先调用super.onStart()
),除非有明确的理由不这样做。
请注意,这是super.onStart()
的另一种方式,因为框架onPause()
可能会释放您自己清理所需的资源。
因此,作为一般规则:首先初始化框架,最后清理框架。当然,这个规则现在或者之后需要被打破的原因有多种。