Activity生命周期和调用时机

在这里插入图片描述

onCreate

表示Activity正在被创建,这是Activity 生命周期执行的第一个方法。可以做一些初始化的工作。
比如:加载布局文件、绑定控件、初始化数据等。
调用时机:Activity创建时调用,并且只会调用一次。

onStart

表示Activity正在被启动,此时Activity处于可见状态,但是还没有焦点,不能与用户进行交互。
源码中有这么一句话  drawing visual elements, running animations, etc.
翻译过来就是绘制视觉元素、运行动画等。
调用时机:紧跟onCreate()之后,Activity由不可见变为可见状态时调用。

onResume

表示Activity已经已经获得了焦点,可以与用户进行交互。
可以做一些刷新页面的操作,比如重新发送接口请求获取最新数据等。
调用时机:onStart之后,当Activity每次到前台时调用。

onPause

表示Activity已经失去焦点,不可与用户进行交互。
调用时机:当Activity回到后台时调用。

onStop

表示Activity已经完全不可见了。可以做一些停止的工作,比如暂停动画、暂停视频的播放、暂停banner的轮播等。
调用时机:当Activity不可见时候被回调。

onDestory

表示Activity已经被销毁,可以做一些回收的工作。比如 bitmap的回收,对象的置空,curosr的关闭等。

onRestart

表示Activity重新回到前台,接下来调用onStart、onResume。
调用时机:当Activity重新回到前台时回调。

流程图

在这里插入图片描述

此外还有两个特殊情况下会执行的生命周期onSaveInstanceState和onRestoreInstanceState。
将手机从竖屏切换到横屏时看下Activity执行的生命周期顺序。
在这里插入图片描述

再从横屏切换到竖屏看下Activity执行的生命周期顺序。
在这里插入图片描述
发现两次执行的生命周期是一致的。
按下Home键Activit的生命周期执行的顺序是这样的
在这里插入图片描述
再点击应用图标执行的生命周期是这样的

在这里插入图片描述
所以特殊情况下(屏幕旋转、按下home键盘) onSaveInstanceState是用来保存数据的,onRestoreInstanceState是用来恢复数据的。
看下代码

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState");
        outState.putString(TAG,"保存的数据");
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "onCreate");
        if(savedInstanceState != null){
            Log.d(TAG,"拿到了"+savedInstanceState.getString(TAG));
        }
    }

    @Override
    protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d(TAG, "onRestoreInstanceState");
        Log.d(TAG, "拿到了"+savedInstanceState.getString(TAG));
    }

打印信息:
在这里插入图片描述
可以看到正确保存和恢复了数据。
最后看一下当SecondActivity设置为singleTop启动模式,在SecondActivity点击跳转SecondActivity时,代码如下:

  //点击跳转当前页面
  Intent intent=new Intent(SecondActivity.this,SecondActivity.class);
  intent.putExtra("SecondActivity","传递的数据");
  startActivity(intent);
  
 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.d(TAG, "onNewIntent");
        Log.d(TAG, intent.getStringExtra("SecondActivity"));
    }

打印如下:在这里插入图片描述
看到并没有执行onCreate()和onStart()而是执行了onNewIntent()并且拿到了传递过来的数据。

异常情况下(注这里的MainActivity无论设置哪种启动模式,下面的MainActivity执行的生命周期是一样的)
MainActivity跳转SecondActivity执行的生命周期
在这里插入图片描述
SecondActivity空指针报错闪退回到MainActivity执行的生命周期
在这里插入图片描述
MainActivity重新启动了,实际上是应用重新启动了。比正常进入MainActivity多执行了一个onRestoreInstanceState()方法,并且拿到了之前保存的值。

总结

Activity是安卓四大组件之一,其重要性不言而喻。掌握Activity的生命周期对日常开发有很大的帮助,另外本文也是面试官非常爱问的面试题。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值