Activity的生命周期

目录

前言

Activity的生命周期

五种状态

 生命周期相关方法


前言

Android中有着四大组件:Activity、Service、ContentProvider和BroadcastReceiver。本篇我们主要讲解的是Activity组件,它是安卓提供给用户与手机之间进行交互的界面 控件,那么activity从创建到销毁经历了哪些状态呢?接下来我们就来了解一下。

Activity的生命周期

五种状态

Activity的生命周期指的是activity从创建到销毁的整个过程。这个过程中有五个状态:

  1. 启动状态:启动时间很短暂,一般当activity启动之后就会进入运行状态;
  2. 运行状态:此时activity处于界面前端,是可见、有焦点的,能够和客户进行交互,如点击按钮等。
  3. 暂停状态:此状态下是可见的,但获取不到焦点,对用户的操作不会有响应。比如,当activity上覆盖了一个透明或者非全屏的界面时,被覆盖的界面就会处于暂停状态;
  4. 停止状态:activity完全不可见,此时就处于停止状态,例如,当系统资源不足时,这种状态下的activity很容易被销毁;
  5. 销毁状态:当处于销毁状态时,将清除内存。

 生命周期相关方法

在Activity中,它的生命周期包括创建、可见、获取焦点、失去焦点、不可见、重新可见、销毁等。环节。针对每个环节,activity提供相应的回调方法。

  • onCreate():创建activity时调用,一般用于初始化操作。
  • onStart():activity即将可见时调用,此时可以做一些数据的初始化操作(从后台拉取数据等)
  • onResume():activity获取焦点时调用。此时可以进行交互。
  • onPause():当前的activity被其他activity覆盖或屏幕锁屏时调用。
  • onStop():activity对用户不可见时调用。
  • onRestart():activity从停止状体到再次启动状态时调用。
  • onDestory():销毁activity时调用。

接下来我们就来通过一个案例来进一步更好的了解上面方法在什么时候会被调用。

假设我们现在创建了一个Activity A,那么这个就会经历以下几个生命周期:

  1. onCreate():A正在被创建,在这个方法中,我们可以做一些Activity的初始化操作,例如:加载布局文件和事件的绑定(setContentView、findViewById,setOnClickListener等)。
  2. onStart():A正在被启动,在这个过程中,A从不可见变为可见,但此时依旧无法和用户进行交互。此时可以做一些数据的初始化操作,如拉取数据等。
  3. onResume():A此时已经可见,出现在前台,处于返回栈栈顶,可以和用户进行交互。

以下就是一个Activity在从创建到能和用户进行交互所会经历的生命周期。

但如果此时我们再加入一个Activity B,那么Activity还会经历以下几个生命周期:

     4.onPause():此时A正在停止,准备从前台转到后台,此时可以做一些停止动画,数据存储等操作。

     5.onStop():在A完全不可见时调用,紧随着onPause执行,表示A即将停止,此时A已经不在前台。可以做一些稍微重量级的回收操作,不能太耗时。(如果此时新打开的B时对话框的Activity,背景存在一定区域是透明的,则A的onStop不会调用)。

     6.onDestory():表示即将被销毁,在这里我们可以进行资源的回收、释放等工作。一般是在用户按下back键或者系统资源紧张的时候,将A释放掉以获取更多的内存调用。

     7.onRestart:A由onStop停止状态,转为运行状态时调用,表示A正在被重新启动。

     8.onStart

     9.onResume

 

我们通过这张图片看到,不过这里还未提到的一点是,上面的图中onPause()还有个箭头指向了onResume(),这是一种比较极端的情况,即考虑当A跳转到B的情况,此时A还在执行onPause,B还未显示出来。此时快速得从B回到A,此时就会直接执行A的onResume(0而不会走onRestart(),不过一般这种情况还是有点难复现的,当然手速快就可以看到。

我们可以总结:

1.onStart、onResume、onPause、onStop 看起来回调的时机差不多,那么它们有上面区别呢?

onStart和onStop是从Activity是否可见的角度来回调的,而onResume和onPause是从Activity是否位于前台、是否可以与用户交互的角度来回调的。

2.从A跳转到B,是先执行A的onPause(),还是先执行B的onResume()?

这部分的源码比较复杂,不过我们可以记住结论:A的onPause()会先执行,然后再执行B的onResume()。


先这样叭~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的咖啡馆管理系统

基于SSM的咖啡馆管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisJSP工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台界面 后台界面 摘要 在当前这个信息爆炸的时代,众多行业正经历着…

win10环境下gvim离线配置插件的一些补充

0 总述 在上一篇博客,即《Windows系统下使用gvim配置LaTeX快速书写环境》一文中,本小白试图模仿神级人物Gilles Castel,打造vim下的 LaTeX \LaTeX LATE​X书写环境。实话实说,东施效颦了。虽不至于一无所得,但也仅仅算…

UE5开发——射击武器类拾取

整体框架: 拾取武器 要在 Unreal Engine 5 (UE5) 中实现一个按 E 键拾取武器的功能,您可以遵循以下步骤: ### 步骤 1: 创建拾取物品的基础类 1. 在 Content Browser 中创建一个新的 C 类,继承自 AActor 或者 AStaticMeshActor。…

服务器间进行文件传输-SFTPSCP一篇搞定

1.简单介绍一下 在一些特殊场景,两台服务器之间需要进行文件传输的时候,或许我们会想到FTP,这也是我们常见的实现方式,但是如果我们不能操作远程服务器,无法判断远程服务器是否安装了FTP呢,众所周知&#…

在Web服务应用中,如何编程使用Redis的缓存功能?包括缓存页面内容、缓存数据库查询结果、用户会话信息等代码分享

目录 一、概述 二、redis介绍 1、简介 2、Redis作为缓存的原理 (1)内存存储 (2)数据结构 (3)工作原理 3、Redis作为缓存的作用 三、redis缓存页面内容 1、作用 2、实现方法 3、示例代码&#x…

原型与原型链

在JavaScript中,原型(prototype)和原型链(prototype chain)是理解对象如何继承属性和方法的关键概念。 原型 每一个对象(函数也是对象)都有一个特殊的属性叫做原型(prototype&…

k3s中使用GPU资源

前提是已经安装了nvidia驱动 一、安装nvidia-container-toolkit(推荐) #复制一份docker配置文件,以防被覆盖 cp /etc/docker/daemon.json /etc/docker/daemon.json.bak #安装NVIDIA Container Toolkitapt-get install nvidia-container-toolkit二、配置…

Linux和Unix的区别及为什么鸿蒙系统不用Unix的原因

目录 Linux是什么? Unix是什么? 他们的区别: 鸿蒙系统介绍及鸿蒙系统不用Unix的原因 Linux是什么? Linux的历史可以追溯到1991年,由芬兰的计算机科学家林纳斯托瓦兹(Linus Torvalds)为了学习操作系统的工作原理而…

海绵城市雨水监测系统

海绵城市雨水监测系统主要有:数据采集、无线数据传输、后台云服务、终端平台显示等部分组成。系统通过前端数据采集水质(ss\cod\浊度、PH等)、雨水雨量、流量、水位、土壤湿度、气象等数据。通过无线数据传输通讯(4G、5G、以太网、…

小柴带你学AutoSar系列三、标准和规范篇(3)ModeManagement

目录 ModeManagementGuide 2 Overall mechanisms and concepts 2.1 Declaration of modes 2.2 Mode managers and mode users 2.3 Modes in the RTE 2.4 Modes in the Basic Software Scheduler 2.5 Communication of modes 3 Configuration of the Basic Software Mod…

华为云征文|部署个人博客管理系统 Ghost

华为云征文|部署个人博客管理系统 Ghost 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 应用场景1.3 对比普通ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Ghost3.1 Ghost 介绍3.2 Docker 环境搭建3.3 Ghost 部署3.4 Gho…

《数字信号处理》学习01-离散时间信号与序列的卷积和运算

目录 一,信号 二,序列的运算 1,卷积和 2,matlab实现 相关的电子书籍请到这篇文章所在的专栏,并通过夸克网盘链接下载。 很多简单的知识点我就不再赘述了,接下来就着重记录我学习过程中遇到的较难理…

Vue——day07之条件渲染、列表渲染以及监测数据

目录 1.template标签 2.条件渲染 3.列表渲染 4.v-for中的key的作用以及原理 5.列表过滤 placeholder 前端空字符串 使用数据监视watch实现 使用计算属性实现 6.列表排序 7.Vue更新数据检测失败 原因 总结 1.template标签 template标签是Vue.js中的一个特殊元素&am…

新型蜜罐有哪些?未来方向如何?

前言:技术发展为时代带来变革,同时技术创新性对蜜罐产生推动力。 一、新型蜜罐的诞生 技术发展为时代带来变革,同时技术创新性对蜜罐产生推动力,通过借鉴不同技术思想、方法,与其它技术结合形成优势互补,…

MC药水酿造

药水酿造(Brewing)是在酿造台中往水瓶里加入各种材料而制作药水、喷溅药水和滞留药水的过程。 将1-3个水瓶或药水放入酿造台界面底部的药水槽中,将材料放入顶部的材料槽中,再在燃料槽里放置烈焰粉,便可开始酿造。 药水的酿造一般从水瓶开始,水瓶可以用玻璃瓶从水源或

探讨抗晃电应用技术在煤化工生产中的运用

摘要:当前,电力供应面临的压力日益增大,用户群体的多样性也日益复杂。在电网运行中,电压波动(晃电)现象频繁发生。研究指出,电压波动的原因多种多样,包括自然因素、设备故障以及人为…

EXO项目StandardNode;max_generate_tokens;buffered_token_output;is_finished;

目录 StandardNode max_generate_tokens buffered_token_output 构造函数参数 类属性 总结 is_finished max_generate_tokens self.buffered_token_output StandardNode _process_tensor result是一个np.ndarray ,result.size == 1是什么意思 StandardNode max_g…

kaggle平台free使用GPU

1、注册 请保证在【科学上网】条件下进入如下操作,只有在注册账户和手机号验证时需要。 step1:注册账户 进入kaggle官网:https://www.kaggle.com/,点击右上角【Register】进入注册页面 最好选择使用邮箱注册(&#…

【例003】利用MATLAB绘制有趣平面图形

题目: 用 ezplot 画出由方程 sin ⁡ ( x 2 m y 2 1000 ) cos ⁡ ( x y ) \sin(x^2\frac{my^2}{1000})\cos(xy) sin(x21000my2​)cos(xy) 确定隐函数的图形。 求解: 我们分别取m为100,1000,10000不同的值,绘制不同情况下的图…

3.1 线性结构

令序列X、Y、Z的每个元素按顺序进栈,且每个元素进栈.出栈各一次,则不可能得到出栈序列( )。 A. XYZ B. XZY C. ZXY D. YZX 正确答案是 C。 解析 ZXY不可能得到这个序列,因为当Z最先出栈,说明X、Y已经入栈&a…