【Android -- 四大组件】Activity 知识点

一、前言

定义

属于 Android 四大组件之一:ActivityServiceBroadcastReceiverContentProvider

作用

显示界面 & 与用户进行交互。

  • 一个 Activity 通常是一个界面,是四大组件唯一能被用户感知的;
  • 每个活动被实现为一个独立的类, & 从活动基类继承过来;
  • Activity 之间通过 Intent 进行通信。

二、Activity 的生命周期

生命周期:onCreate() -> onStart() - > onResume() -> onPause() -> onStop() -> onDestroy()
生命周期

  • 启动 Activity:系统先调用 onCreate(),然后调用 onStart(),最后调用 onResume()方法,Activity 进入运行状态。

  • Activity 被其他 Activity 覆盖其上(DialogActivity)或者锁屏:系统会调用 onPause() 方法,暂停当前 Activity 的执行。

  • 当前 Activity 由被覆盖状态回到前台或者解锁屏:系统会调用 onResume() 方法,再次进入运行状态。

  • 当前 Activity 转到新的 Activity 界面或按 Home 键回到主屏,自身退居后台:系统会先调用onPause() 方法,然后调用 onStop() 方法,进入停滞状态。

  • 用户后退回到此 Activity:系统会先调用 onRestart() 方法,然后调用 onStart() 方法,最后调用 onResume() 方法,再次进入运行状态。

  • 当前 Activity 处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前 Activity,而后用户退回当前 Activity:再次调用 onCreate() 方法、onStart() 方法、onResume() 方法,进入运行状态。

  • 用户退出当前 Activity:系统先调用 onPause() 方法,然后调用 onStop() 方法,最后调用onDestory() 方法,结束当前 Activity。

  • onRestart():表示 Activity 正在重新启动 ,一般情况下,当前 Activity 从不可见重新变成可见状态时,onRestart() 就会被调用,这种情形一般是用户行为所导致的,比如用户按 Home 键切换到桌面然后重新打开 APP 或者按 Back 键。

  • onStart():Activity 可见了,但是还没有出现在前台,还无法和用户交互。

  • onPause():表示 Activity 正在停止,此时可以做一些存储数据,停止动画等工作,注意不能太耗时,因为这会影响到新 Activity 的显示,onPause() 必须先执行完,新的 Activity 的onResume() 才会执行。

  • 从 Activity 是否可见来说,onStart() 和onStop()是配对的,从activity是否在前台来说,onResume()和onPause()是配对的。

  • 旧 Activity 先 onPause(),然后新 Activity 再启动。

注意:当 Activity 中弹出 Dialog 对话框的时候,Activity 不会回调onPause()。
然而当 Activity 启动 Dialog 风格的 Activity 的时候,此 Activity 会回调 onPause() 函数。

三、异常情况下的生命周期

情况1:资源相关的系统配置发生改变导致 Activity 被杀死并重新创建

比如说当前 Activity 处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity 就会被销毁并且重新创建,当然我们也可以组织系统重新创建我们的 Activity。
生命周期
系统配置发生改变以后,Activity 会销毁,其 onPause(),onStop(),onDestory()均会被调用,由于 Activity 是在异常情况下终止的,系统会调用 onSaveInstance() 来保存当前 Activity 状态,这个方法的调用时机是在 onStop() 之前。与 onPause() 没有既定的时序关系,当 Activity 重新创建后,系统会调用 onRestoreInstanceState(),并且把 Activity 销毁时 onSaveInstanceState()方法保存的 Bundle 对象作为参数同时传递给 onRestoreInstanceState() 和 onCreate() 方法。
同时,在 onSaveInstanceState() 和 onRestoreInstanceState() 方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView 滚动的位置等,这些 View相关的状态系统都能够默认为我们恢复。可以查看 View 源码,和 Activity 一样,每个 View 都有 onSaveInstanceState()方法和onRestoreInstanceState()方法。

情况2:资源内存不足导致低优先级的 Activity 被杀死

这里的情况和前面的情况1数据存储和恢复是完全一致的,Activity 按照优先级从高到低可以分为如下三种:
(1)前台 Activity — 正在和用户交互的Activity,优先级最高
(2)可见但非前台 Activity — 比如 Activity 中弹出了一个对话框,导致 Activity 可见但是位于后台无法和用户直接交互。
(3)后台 Activity — 已经被暂停的 Activity,比如执行了 onStop(),优先级最低。

横竖屏切换,防止重新创建 Activity:Activity 指定 configChange 属性来不让系统重新创建Activity。
android : configChanges = “orientation”

四、Activity 与 Fragment 生命周期关系

创建过程:
创建过程
销毁过程:
销毁过程

注意点

1. 生命周期方法是成对出现(配对)

  • onCreate() & onDestory()
  • onStart() & onStop()
  • onResume() & onPause()

2. onStart() & onStop()、onResume() & onPause() 除了回调时刻,在实际使用中无任何区别

  • onStart() & onStop() :从 Activity 是否完全可见的角度 进行回调
  • onResume() & onPause(): 从 Activity 是否位于前台(UI最顶层)的角度进行回调;

3. 当前 Activity 为 A,此时用户打开 ActivityB后,那么 A 的 onPause()和 B 的 onResume() 哪个方法先执行?
先 A的onPause() ,再B的onResume()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin-Dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值