此时会走onPause()->onStop()->onDestroy()方法:
从MainActivity中启动SecondActivity我们可以很清楚的看到MainActivity中的onPause方法执行完了以后然后新的SecondActivity的onCreate、onStart、onResume方法就会依次执行将SecondActivity显示出来,最后MainActivity的onStop方法才会被调用。这同时也验证了之前提到的,google并不建议在onPause方法里进行一些耗时操作。
1)onSaveInstanceState与onRestoreInstanceState方法
前面提在介绍onCreate的时候提到过onCreate方法中带有一个Bundle参数,我们在正常启动Activity的时候打印这个参数会发先它是为null的。我们看google文档可以发现,这个参数只有当Activity重新初始化的时候才不会为null。那么什么叫重新初始化呢?举一个简单的例子,比方说手机横竖屏切换的时候如果我们没有在manifest文件的configchange属性里指定orientation|screenSize(在android4.0以上必须同时指定这两个属性,如果只写orientation不生效)就会在onPause之后调用到onSaveInstanceState(Bundle)方法,此时我们就可以往Bundle里存储一些数据,随后系统会杀死Activity然后再重启它,此时我们发现onCreate方法中的Bundle参数不为空:
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(TAG, "MainActivity onCrate");
if (savedInstanceState != null) {
Log.i(TAG, "onCreate:" + savedInstanceState.getString(TAG));
} else {
Log.i(TAG, "onCreate:" + savedInstanceState);
}
}
@Overrideprotected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState");
outState.putString(TAG, "outState");
}
3).onNewIntent方法
当我们在manifest文件里对Activity的launchmode进行设置为singleTop、singleTask、singleInstance的时候都会有可能调用到此方法。如图所示:
1.Intent.FLAG_ACTIVITY_NEW_TASK
使用一个新的任务栈来启动一个Activity,该flag通常用于在Service中启动Activity的场景,因为Service中并不存在有Activity任务栈所以通常通过这种方式来新启动一个Activity任务栈并创建新的Activity实例。
2.Intent.FLAG_ACTIVITY_SINGLE_TOP
与在manifest文件里的launchmode指定"singleTop"作用一样
3.Intent.FLAG_ACTIVITY_CLEAR_TOP
与在manifest文件里的launchmode指定"singleTask"作用一样
4.Intent.FLAG_ACTIVITY_NO_HISTORY
设置了该Flags的Activity在启动其他Activity后该Activity就消失了,不会保留在Activity栈中,此Activity可以作为一个中转Activity来负责启动其他的Activity。