浅谈Activity的生命周期
Activity作为四大组件之一,是在平时开发中使用最为频繁的一个组件,了解Activity的生命周期有助于我们更好地去优化用户体验。
- Activity的生命周期图
一般情况下,Activity会经历的生命周期:
onCreate
Activity的创建,是生命周期中的一个方法,在这个方法中我们可以做一些初始化的工作,比如加载我们的布局。
onStart
Activity正在启动,此时我们还无法获取到Activity的焦点,无法与其交互。
onResume
此时Activity已经出现在了前台,用户可以与其进行交互。
onPause
Activity处于正在暂停的状态,此时无法获取到其焦点,无法与其进行交互。此生命周期方法不建议进行一些耗时的操作,如果要启动一个新的Activity,onPause需要先执行完毕才会执行新Activity的onResume方法,在onPause中进行耗时操作会导致新Activity启动卡顿,产生非常不好的用户体验。
onStop
Activity处于停止状态,无法在前台界面进行显示。
onDestroy
Activity销毁时执行的方法,我们可以在此生命周期中进行一些资源释放的操作。
onRestart
Activity的重新启动,当一个Activity从不可见状态变为可见状态时会执行此方法。
生命周期代码验证
如果从上述描述看的不是很清楚的话,我们来通过代码实例来看一下Activity的生命周期。
- 开启一个Activity所经历的生命周期
11-13 04:42:47.538 1083-1083/com.jiang.example.activitylift I/activity: onCreate
11-13 04:42:47.542 1083-1083/com.jiang.example.activitylift I/activity: onStart
11-13 04:42:47.546 1083-1083/com.jiang.example.activitylift I/activity: onResume
我们可以看到打开一个全新的Activity所经历的生命周期为onCreate( ),onStart( ),onResume( )。
- 打开之后接着按Home键回到桌面
11-13 05:15:10.678 26401-26401/com.jiang.example.activitylift I/activity: onPause
11-13 05:15:11.402 26401-26401/com.jiang.example.activitylift I/activity: onStop
Activity执行了onPause( ),onStop( )进入后台。
- 紧接着重新打开Activity
11-13 05:17:34.534 26401-26401/com.jiang.example.activitylift I/activity_old: onRestart
11-13 05:17:34.534 26401-26401/com.jiang.example.activitylift I/activity_old: onStart
11-13 05:17:34.534 26401-26401/com.jiang.example.activitylift I/activity_old: onResume
Activity执行了onRestart( ),onStart( ),onResume()重新启动,并在前台显示。
- 在一个Activity中开启一个新的Activity
11-13 04:50:16.862 1083-1083/com.jiang.example.activitylift I/activity_old: onPause
11-13 04:50:17.170 1083-1083/com.jiang.example.activitylift I/activity_new: onCreate
11-13 04:50:17.174 1083-1083/com.jiang.example.activitylift I/activity_new: onStart
11-13 04:50:17.198 1083-1083/com.jiang.example.activitylift I/activity_new: onResume
11-13 04:50:17.986 1083-1083/com.jiang.example.activitylift I/activity_old: onStop
之前的Activity执行onPause( )之后新的Activity执行onCreate( ),onStart( ),onResume( )三个生命周期方法,执行完毕之前的Activity执行onStop( )进入停止状态。
-紧接着我们按返回键回到上一个Activity
11-13 05:06:40.406 16485-16485/com.jiang.example.activitylift I/activity_new: onPause
11-13 05:06:40.410 16485-16485/com.jiang.example.activitylift I/activity_old: onRestart
11-13 05:06:40.410 16485-16485/com.jiang.example.activitylift I/activity_old: onStart
11-13 05:06:40.410 16485-16485/com.jiang.example.activitylift I/activity_old: onResume
11-13 05:06:40.798 16485-16485/com.jiang.example.activitylift I/activity_new: onStop
11-13 05:06:40.798 16485-16485/com.jiang.example.activitylift I/activity_new: onDestroy
我们看到第二个Activity执行了onPause( )紧接着之前的Activity执行了onRestart( ),onStart( ),onResume( )在前台显示,然后第二个Activity执行了onStop( ),onDestroy( )进行了销毁。
- 在一个Activity中打开一个具有透明主体的Activity
11-13 05:26:42.302 3378-3378/com.jiang.example.activitylift I/activity_old: onPause
11-13 05:26:42.366 3378-3378/com.jiang.example.activitylift I/activity_new: onCreate
11-13 05:26:42.374 3378-3378/com.jiang.example.activitylift I/activity_new: onStart
11-13 05:26:42.374 3378-3378/com.jiang.example.activitylift I/activity_new: onResume
我们会发现之前的Activity执行完onPause( )之后并没有去执行onStop( ),此时之前的Activity并没有进入后台,还是在前台显示,只不过用户无法获取焦点,不能进行屏幕操作。
- 按返回键回到之前Activity
11-13 05:34:02.086 3378-3378/com.jiang.example.activitylift I/activity_new: onPause
11-13 05:34:02.094 3378-3378/com.jiang.example.activitylift I/activity_old: onResume
11-13 05:34:02.118 3378-3378/com.jiang.example.activitylift I/activity_new: onStop
11-13 05:34:02.118 3378-3378/com.jiang.example.activitylift I/activity_new: onDestroy
此时我们会之前的Activity并没有去执行onRestart( ),onStart( ),而是直接去执行了onResume( )在前台进行显示。
注
1目录
- 本文纯属自己学习总结,不免有错误之处,烦请多多指正. ↩