IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Activity的生命周期 -> 正文阅读

[移动开发]Activity的生命周期

Activity的生命周期

分为两部分来讨论

一、典型情况下的生命周期

[—b]
正常情况下的activity会经历如下的生命周期

  1. onCreate:表示Activity正在被创建。在这个方法中,我们可以做一些初始化工作,比如调用setContentView去加载界面布局资源、初始化Activity所需数据等
  2. onRestart:表示Activity正在重新被启动,当前Activity从不可见重新变为可见状态时,onRestart就会被调用。这种情形一般是用户行为所导致的(比如用户按Home键切换到桌面或者用户打开了一个新的Activity,这时当前的Activity就会暂停,也就是onPause和onStop被执行了)接着用户又回到了这个Activity,就会出现这种情况。
  3. onStart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户交互。这个时候其实可以理解为Activity已经显示出来了,但是我们还看不到。
  4. onResume:表示Activity已经可见了,并且出现在前台准备与用户进行交互。要注意这个和onStart的对比,onStart和onResume(两者的区别)都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。
  5. onPause:表示Activity正在暂停,正常情况下,紧接着onStop就会被调用,此时可以做一些存储数据、停止动画等工作,但是注意不能太耗时,因为这会影响到新Activity的显示,onPause必须先执行完,新Activity的onResume才会执行。
  6. onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作
  7. onDestroy:表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,可以做一些最终资源的释放
    [—e]
    在这里插入图片描述

  1. 第一次启动,回调如下:onCreate -> onStart -> onResume
  2. 打开新的activity或者切回到桌面,回调如下:onPause -> onStop
  3. 再次回到原Activity时,回调如下:onRestart -> onStart -> onResume
  4. 按back键回退时,回调如下:onPause -> onStop -> onDestroy

[—b]
Q1:onStart和onResume、onPause和onStop从描述上来看差不多,对我们来说有什么实质的不同呢?
A1:这个问题就是回答这四个的概念

Q2:假设当前Activity为A,如果这时用户打开一个新Activity B,那么B的onResume和A的onPause哪个先执行呢?
A2:旧Activity的onPause会先执行,然后才会启动新的Activity
在这里插入图片描述
不能在onPause中做重量级的操作,因为必须onPause执行完成以后新Activity才能Resume
[—e]


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

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

[—b]
Q3:由竖屏变为横屏为啥Activity就会被销毁并重新创建
A3:拿最简单的图片来说,当我们把一张图片放在drawable目录后,就可以通过Resources去获取这张图片。同时为了兼容不同的设备,我们可能还需要在其他一些目录放置不同的图片,程序启动时,系统就会根据当前设备的情况去加载合适的Resources资源,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity就会被销毁并且重新创建
onStop之前 系统会调用onSaveInstanceState来保存当前Activity的状态。当Activity被重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。
也就是说onSaveInstanceState和onRestoreInstanceState 会在activity异常销毁并重建的情况下调用,因此,我们可以通过onRestoreInstanceState(在onCreate之后)和onCreate方法来判断Activity是否被重建了

Q4:关于保存和恢复View层次结构
A4:系统的工作流程是这样的:首先Activity被意外终止时,Activity会调用onSaveInstanceState去保存数据,然后Activity会委托Window去保存数据,接着Window再委托它上面的顶级容器去保存数据。顶层容器是一个ViewGroup,一般来说它很可能是DecorView。最后顶层容器再去一一通知它的子元素来保存数据,这样整个数据保存过程就完成了。可以发现,这是一种典型的委托思想,上层委托下层、父容器委托子元素去处理一件事情,这种思想在Android中有很多应用,比如View的绘制过程、事件分发等都是采用类似的思想。

总结 异常情况 多了onSaveInstanceState和onRestoreInstanceState 一个在onStop之前 一个在onCreate之后
[—e]
在这里插入图片描述

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

这种情况我们不好模拟,但是其数据存储和恢复过程和情况1完全一致。
[—b]
Activity按照优先级从高到低,可以分为如下三种

  1. 前台Activity——正在和用户交互的Activity,优先级最高。
  2. 可见但非前台Activity——比如Activity中弹出了一个对话框,导致Activity可见但是位于后台无法和用户直接交互。
  3. 后台Activity——已经被暂停的Activity,比如执行了onStop,优先级最低。
    当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数数据
    [—e]
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:49:02  更:2022-02-09 20:49:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:32:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码