首先复写Activity的7个方法,来观测这几个方法的执行顺序。
//复写生命周期方法
@Override
protected void onRestart() {
// TODO Auto-generated method stub
System.out.println("debug-first-->onrestart");
super.onRestart();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
System.out.println("debug-first-->onresume");
super.onResume();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
System.out.println("debug-first-->ondestroy");
super.onDestroy();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
System.out.println("first-->onpause");
super.onPause();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
System.out.println("debug-first-->onstart");
super.onStart();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
System.out.println("debug-first-->onstop");
super.onStop();
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("debug-first-->oncreate");
setContentView(R.layout.activity_main);
start();
}
使用两个Activity来切换来观测这7个方法的执行步骤,来体验Activity的生命周期。
启动第一个Activity,logcat的输出日志
debug-first-->oncreate
debug-first-->onstart
debug-first-->onresume
点击第一个Activity的按钮切换到第二个Activity:
debug-second-->oncreate
debug-second-->onstart
debug-second-->onresume
debug-first-->onstop
这里先创建启动第二个Activity,在停止第一个Activity,此时并没有销毁第一个Activity
使用系统返回键,返回到第一个Activity。
debug-second-->onpause
debug-first-->onrestart
debug-first-->onstart
debug-first-->onresume
debug-second-->onstop
debug-second-->ondestroy
执行过程:先暂停第二个Activity,然后重新启动第一个Activity,没有执行第一个Activity的onCreate方法。并且,我这台机器可能配置的虚拟设备内存小,它最后停止并结束了第二个Activity。
直接启动程序,启动第一个Activity。然后按home返回桌面,此时系统会调用:
debug-first-->onstop
暂停第一个Activity。
这个时候点击程序图标启动程序:
debug-first-->onrestart
debug-first-->onstart
debug-first-->onresume
不会重新创建Activity。(当系统资源不足,系统清除这个Activity的情况除外)
切换Activity的输出日志图: