@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("lifeCycle", "MainActivity: 我是onCreate方法,我会在Activity第一次被创建是调用"); Button jumpButton = (Button) findViewById(R.id.jump_second_button); jumpButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //跳转到SecondActivity Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); } //Ctrl + O 选择父类中的方法进行重写 @Override protected void onStart() { super.onStart(); Log.d("lifeCycle", "MainActivity: 我是onStart方法,我会在Activity由不可见变为可见时调用"); } @Override protected void onResume() { super.onResume(); Log.d("lifeCycle", "MainActivity: 我是onResume方法,我在Activity处于运行状态时调用"); } @Override protected void onPause() { super.onPause(); Log.d("lifeCycle", "MainActivity: 我是onPause方法,我会在Activity暂停时调用"); } @Override protected void onStop() { super.onStop(); Log.d("lifeCycle", "MainActivity: 我是onStop方法,我会在Activity停止时调用"); } @Override protected void onRestart() { super.onRestart(); Log.d("lifeCycle", "MainActivity: 我是onRestart方法,我会在Activty从停止状态变为运行状态时调用"); } @Override protected void onDestroy() { super.onDestroy(); Log.d("lifeCycle", "MainActivity: 我是onDestroy方法,我会在Activty销毁之前调用"); }2.在SecondActivity中的也是重写上述方法,唯一的区别就是把上面日志中的MainActivity改成SecondActivity,代码类似就不往上粘贴了。
2.Activity间切换
为了更清楚,在点击按钮跳转到SecondActivity之前,我们可以清除一下Log, 下方左边有一个垃圾桶的标志,就是用来清除之前打印的日志的。下方所打印的日志就是点击跳转按钮时所打印的日志。在这个切换过程中,MianActivty会停止运行变为不可见,而SecondActivy就会被创建并且处于运行状态。具体步骤如下。
(1).onPause()方法:当点击跳转按钮时,运行中MainActivity就会调用onPause()变为停止状态,但仍然可见。
(2).接着就是SecondActivity调用onCreate()方法进行创建,调用onStart()方法进行显示,调用onResume()方法进行运行的过程。
(3).onStop()方法:当SecondActivity处于运行状态时,MainActivity就完全不可见了,所以就会调用onStop()方法,进入完全不可见停止状态。

3.从另一个Activity返回
从SecondActivity中点击返回键,从SecondActivity中返回到MainActivity中。下方的Log是点击返回按钮时所打印的Log.
(1)onPause()方法:点击返回按钮后,SecondActivity会调用onPause()方法,进入暂停运行状态。
(2)onRestart()方法:接着MainActivity就会调用onRestart()方法,由停止状态变为运行状态。然后MainActivity又会调用onStart方法从不可见变为可见,接着会调用onResume()方法最终进入运行状态。
(3)当返回到MainActivity中并且MainActivity处于运行状态后,SecondActivity会调用onStop方法,停止运行并不可见。因为SecondActivty做的事出栈操作,停止运行后,就会调用onDestory方法进行销毁。下此在进入SecondActivity中时,还是从onCreate方法进行执行。

4.Activity退出并销毁
接着在MainActivity中点击返回按钮就会退出App了,下方是退出App时打印的Log信息。MainActivty先调用onPause()方法变为暂停运行状态,然后再调用onStop()方法停止运行,最后调用onDestroy()方法进行销毁。

三.生命周期流程图
1.上面是用语言通过实例打印出的Log来描述两个Activity切换的生命周期,接下来将用一个流程图来描述这一过程,具体流程图如下。

2.通过上面的实例不难分析出一个Activity的生命周期分为哪些阶段,并且很容易的看出哪些阶段在什么时候执行,所以我们很容易的画出一个Activity的生命周期,下方的流程图是一个Activity的生命周期。

四.Activity的加载模式
Activity的启用模式也较为简单,它会在活动切换时用到。Activity的启动模式分为四种,standard、singleTop、singleTask、singleInstance模式。接下来将为大家详细的介绍一下这几种加载模式。
Activity的加载模式可以在配置文件AndroidManifest.xml中进行配置,配置项为android:launchMode具体如下图所示:

1.standard模式
在Activity的栈中无论该活动有没有加入栈,活动就会被创建。测试方式是把MainActivity的launchMode设置成standard, 在MainActivity中添加一个按钮,点击按钮使用Intent跳转到当前Activity,看onCreate方法中打印的Log。点击按钮的方法如下:
Button launchModelButton = (Button) findViewById(R.id.launch_model_button); launchModelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, MainActivity.class); startActivity(intent); } });standard加载模式的栈如下所示,无论栈中有没有该对象的实例,都会被创建。
2.singleTop模式
只要被创建的活动不位于栈的顶部,该活动就会被创建入栈。如果将要被创建的活动位于栈的顶部,该活动的实例就不会被创建。测试方法,把上面的模式直接改成singleTop模式,MainActivty往自己身上跳转就不会从新创建一个新的实例,会重用之前在栈顶中的实例。如果是MainActivty跳转到SecondActivty, 然后SecondActivity再次跳转到MainActivty, 那么此时的MainActivity将会被创建,因为栈顶是SecondActivity。如下所示:

3.singleTask模式
单任务模式,这个也不难理解,如果从MainActivty跳转到SecondActivity, 如果再从SecondActivty跳转到MainActivity, 在单任务模式下MainActivity已经在栈中,就会把它之前的Activity出栈,使其处于在栈顶活跃的位置。原理如下图所示:

4.singleInstance
可以看成单例模式,这个比较特殊,被设置成singleInstance的Activity将会放入另一个栈中,因为这样为了便于共用。上面3中模式位于同一个栈中。下方ThirdActivity跳转到一个加载模式为singleInstance的Activity中。

今天的Activity生命周期就先到这儿,相关内容会在下篇博客中进行更新。