浅谈Activity的生命周期

浅谈Activity的生命周期

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

目录


  1. 本文纯属自己学习总结,不免有错误之处,烦请多多指正.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值