我在任何地方都找不到一个确定的答案。我有一个方法,其中调用finish(),然后调用onPause()。
调用finish()后,是否保证会调用onPause()?
如果您在Activity的生命周期中某个时刻调用finish()
,则Android通常会调用onPause()
,除非您在onCreate()
中调用finish()
。
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
finish();
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
}
运行一下代码,观察日志,你会发现只有 "onDestroy" 被记录了。如果在其他位置调用 finish()
,你会看到 onPause() 方法被调用。
onPause()
是有保证的。官方文档在此。onCreate()
对应onDestroy()
,onStart()
对应onStop()
,onResume()
对应onPause()
。当onCreate()
完成其工作时,将调用onStart()
。如果没有调用,则不会调用。 onResume()
表示UI即将显示给用户-(Activity的内容是用户看到的屏幕)。
如果在onCreate()
中直接调用finish()
,则onPause()
将被跳过,因为从未调用onResume()
,同样适用于onStart()
。因此,在某些情况下,您可以说它不是;但那是错误的,因为什么是不作为屏幕或用作屏幕容器的Activity(片段)。
为什么要直接在Activity的onCreate()
中调用finish()?从Activity通常工作的方式来看,onPause()
将始终保证被调用。
虽然有点晚了,但可能会对未来的访问者有所帮助。
我在按照这个教程为我的应用程序制作启动画面时,遇到了onPause()
没有被调用的问题。
经过一些尝试和强迫自己思考,我找到了原因!onCreate()
方法看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
因此,在活动有机会开始或恢复之前,我强制结束它,从而绕过了其他状态方法的调用!
但据我所知,根据官方Activity
文档,在任何其他情况下(至少是正常情况下!),onPause()
方法都是有保证被调用的!