【Android】一文读懂 Activity 的生命周期

安卓基础知识之Activity篇(一):Activity生命周期 安卓基础知识之Activity篇(一):Activity生命周期 安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门。同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系,同时给自己日后留个知识参考。 开始的开始 安卓四大组件中,最常用的组件莫过于我们的Activity组件。安卓程序员每天都在直接或间接地接触着Activity,所以Activity基础知识的重要性不言而喻。 正文 一. 正常情况下的生命周期 阅读详情

前言

作为Android开发人,如果说连Activity生命周期都没搞懂,会走非常多的弯路,所以这篇文章我就对Activity生命周期的生命周期进行一个简单的总结。

单Activity生命周期的整体流程

首先,我们创建一个My_A_Activity,并且打印它的各个生命周期方法。

class My_A_Activity : AppCompatActivity() {
    private val TAG = "My_A_Activity"
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_my_act)
        Log.i(TAG,"onCreate")
    }
​
    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart")
    }
​
    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart")
    }
    
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        Log.i(TAG, "onRestoreInstanceState")
    }
​
    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume")
    }
​
    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause")
    }
​
    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop")
    }
​
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        Log.i(TAG, "onSaveInstanceState")
    }
​
    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy")
    }
} 

现在,我们开始来走一遍单个Activity的生命周期吧!

启动My_A_Activity,日志打印如下:

My_A_Activity: onCreate
My_A_Activity: onStart
My_A_Activity: onResume 

如果按下home键,日志打印如下:

My_A_Activity: onPause
My_A_Activity: onStop
My_A_Activity: onSaveInstanceState 

如果此时再次点击图标进入,日志打印如下:

My_A_Activity: onRestart
My_A_Activity: onStart
My_A_Activity: onResume 

此时,进行横竖屏切换,日志打印如下:

My_A_Activity: onPause
My_A_Activity: onStop
My_A_Activity: onSaveInstanceState
My_A_Activity: onDestroy
My_A_Activity: onCreate
My_A_Activity: onStart
My_A_Activity: onRestoreInstanceState
My_A_Activity: onResume 

此时,退出app,日志打印如下:

My_A_Activity: onPause
My_A_Activity: onStop
My_A_Activity: onDestroy 

以上流程还是很简单的,但是有一个生命周期比较特殊,那就是横竖屏切换的时候,在进行横竖屏切换时,Activity执行了:

onPause -> onStop -> onSaveInstanceState -> onDestroy

方法后又执行了:

onCreate -> onStart -> onRestoreInstanceState -> onResume,说明Activity被销毁并重建了。

这里需要注意一个点,如果Activity的configChanges属性配置了orientation时,横竖屏切换是不会走任何生命周期方法的,配置如下:

<activity
    android:name=".My_A_Activity"
    android:configChanges="orientation" /> 

那么还有一个问题,这个onSaveInstanceState和onRestoreInstanceState是什么方法呢?

其实,它们都不是Activity生命周期的方法,但是有必要知道它们的调用时机,所以这里对它们进行简单的介绍一下:

onSaveInstanceState

onSaveInstanceState(outState: Bundle):在某种时机下,Activity会调用onSaveInstanceState方法通过保存Bundle参数来保存当前的Activity的数据。

onSaveInstanceState(outState: Bundle)方法会在什么时机被调用呢?

有以下几种情况:

  • 按下HOME键切到后台时
  • 锁屏时(按下电源键或自动锁屏)
  • 从该Activity中启动一个新的Activity时
  • 横竖屏切换时 (前提是Activity的configChanges属性配置了orientation)

注意,onSaveInstanceState方法总是会在onStop后调用。

onRestoreInstanceState

onRestoreInstanceState(savedInstanceState: Bundle):当Activity被重新创建(横竖屏切换,或者被系统强杀重启后的重新创建)之后就会调用onRestoreInstanceState,而它的Bundle参数,就是onSaveInstanceState方法保存的。onRestoreInstanceState这个方法会在onStart后调用。

onRestoreInstanceState(savedInstanceState: Bundle)方法会在什么时机被调用呢?

有以下几种情况:

  • Activity在后台的情况下,被系统强杀了,再次打开Activity时
  • 横竖屏切换时 (前提是Activity的configChanges属性配置了orientation)

注意,onRestoreInstanceState这个方法会在onStart后调用。

多Acitivity跳转的生命周期

我们在新建一个Activity,名字就叫My_B_Activity吧,跟My_A_Activity一样,我们直接打印它的各个生命周期方法,另外,在MainActivtiy中加上一个按钮,用于跳转到My_B_Activity。代码很简单,就不贴了。

当打开MainActivtiy,日志打印如下:

My_A_Activity: onCreate
My_A_Activity: onStart
My_A_Activity: onResume 

点击按钮跳转到 My_B_Activity ,日志打印如下:

My_A_Activity: onPause
My_B_Activity: onCreate
My_B_Activity: onStart
My_B_Activity: onResume
My_A_Activity: onStop
My_A_Activity: onSaveInstanceState 

可以看到,先执行了 My_A_Activity 的 onPause 方法,

然后继续执行了 My_B_Activity 的 onCreate -> onStart -> onResume

然后才执行了 My_A_Activity 的 onStop -> onSaveInstanceState

这个点要注意一下,比较关键!

好,我们继续走,销毁 My_B_Activity ,日志打印如下:

My_B_Activity: onPause
My_A_Activity: onRestart
My_A_Activity: onStart
My_A_Activity: onResume
My_B_Activity: onStop
My_B_Activity: onDestroy 

可以看到,先执行了 My_B_Activity 的 onPause 方法,

然后继续执行了 My_A_Activity 的 onRestart -> onStart -> onResume

然后才执行了 My_B_Activity 的 onStop -> onDestroy

这里也是关键,需要注意!

好,我们继续走,销毁 My_A_Activity ,日志打印如下:

My_A_Activity: onPause
My_A_Activity: onStop
My_A_Activity: onDestroy 

至此,本篇结束,其实Activity的生命周期相关的知识点已经讲得差不多了,再多的也什么可将的了,只要你懂得了以上的知识点,应付日常的开发应该已经是够了。最后,我再贴一张非常经典的Activity的生命周期的图出来供大家继续深入理解:

最后

如果大伙有什么好的学习方法或建议欢迎大家在评论中积极留言哈,希望大家能够共同学习、共同努力、共同进步。

小编在这里祝小伙伴们在未来的日子里都可以 升职加薪,当上总经理,出任CEO,迎娶白富美,走上人生巅峰!!

不论遇到什么困难,都不应该成为我们放弃的理由!

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,需要一份小编整理出来的学习资料的关注我主页或者点击扫描下方二维码免费领取~

这里是关于我自己的Android 学习,面试文档,视频收集大整理**,有兴趣的伙伴们可以看看~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言,一定会认真查询,修正不足,谢谢。

HarmonyOS启动恢复之init和AppSpawn 本文作者:江苏润和软件股份有限公司 **1.总体描述 1.1.总体介绍** 启动恢复负责在内核启动之后到应用启动之前的系统关键进程和服务的启动过程。涉及以下模块: a) init启动引导 支持使用LiteOS-A内核的平台,当前包括:Hi3516DV300平台和Hi3518EV300平台。 负责处理从内核加载第一个用户态进程开始,到第一个应用程序启动之间的系统服务进程启动过程。启动恢复子系统除负责加载各系统关键进程之外,还需在启动的同时设置其对应权限,并在子进程启动后对指定进程实行保活(若进程意外退出要 阅读详情

相关推荐

【Android】Activity生命周期

关于安卓activity生命周期的一些理解,结合demo分析,在多个activity之间,跳转到窗口化activity的activity状态变化过程

Haunt_的专栏 916

【鸿蒙应用开发】Ability的生命周期回调函数

在不同的生命周期回调函数中,可以执行不同的操作,例如在onStart函数中进行页面启动时的初始化操作,在onActive函数中进行页面进入前台时的数据加载操作,在onInactive函数中进行页面进入后台时的数据保存操作,依此类推。这些回调函数可以通过重写Ability类中对应的方法来实现。需要注意的是,这些回调函数在不同的生命周期阶段会被自动调用,开发者可以根据需要在这些回调函数中执行相应的操作。需要注意的是,在每个生命周期回调函数的最开始,需要调用父类的相应函数,以确保系统能够正确处理页面的生命周期。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 6514

Android Activity的生命周期和启动模式

参考:《Android开发艺术探索》 1. Activity 的正常生命周期 完整的activity生命周期如下所示 生命周期的几点注意事项: Activity 第一次启动:onCreate->onStart->onResume。 Activity 切换到后台( 用户打开新的 Activity 或者切换到桌面) ,onPause->onStop(如果新 Activity 采用了透明主题,则当前 Activity 不会回调 onstop)。 Activity 从后台到前台,重新可见,o

tulensa的博客 2268

【鸿蒙开发】生命周期

鸿蒙开发arkts,UIAbility组件生命周期,页面和自定义组件生命周期

d312697510的博客 1万+

鸿蒙应用开发培训笔记03:Ability 设计与开发

通过这篇详尽的指南,读者将能够掌握HarmonyOS Ability开发的核心技术,为构建高效、稳定的鸿蒙应用打下坚实基础。最后,我们提供思考题供读者检验理解和深化学习。

howard2005的专栏 3525

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 543

鸿蒙系统学习五-Ability的生命周期

Ability是鸿蒙系统的重要组成部分,分为 FA(Feature Ability)和 PA(Particle Ability)两种类型,,每种类型提供了不同的模板。如下: FA: Page Ability 模板是 FA 唯一支持的模板,提供与用户交互的能力,类似Android系统中的Activity。 PA:分为 Service Ability 和 Data Ability两种模版,Service模板:用于提供后台运行任务的能力,类似Android的后台服务Service。Data Ability用于对

luwei233的博客 6673

phaser3适配微信小游戏

phaser3适配微信小游戏

SilenzioX的博客 1806

Android Activity生命周期详解

Activity作为Android的四大组件之一,非常的重要,也是最常用的四大组件,使用Activity必须要在AndroidManifest中进行注册,那么作为Android的基础,Activity的生命周期你是否完全掌握了呢?下面就让我们来一起回顾一下Activity的生命周期吧! 首先,你需要知道 Activity的生命周期分为两种。   典型情况下的生命周期(就是我们开发中经常用到的...

李家大大大公子 2万+

【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 1万+

什么是 SAP ABAP Secure Storage

此过程将单独的密钥存储在密钥路径中的密钥文件中,并自动使用新加密密钥加密安全存储中的所有数据记录。需要注意的是,不要在没有命令行工具的情况下操作密钥文件,例如,不要用不同的版本替换密钥文件,否则,安全存储中的数据记录可能变得不可读。当需要访问这些数据时,系统会对其进行解密。文件系统中的安全存储(Secure Storage in the File System)也是 SAP NetWeaver Application Server for ABAP 的一部分,主要用于安全存储连接相关的数据,如密码等。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 440

【Android Activity】Activity的生命周期

onCreate:表示Activity正在被创建。生命周期的第一个方法,当打开一个activity时首先回调这个方法。在这个方法中一般做一些初始化工作,例如加载界面布局资源(setContentView)、数据初始化(findviewbyid)onRestart: 表示Activity正在被重新启动。当前activity从不可见变为可见状态时这个方法就会回调。

dev晴天的博客 1万+

基于matlab的轴承损伤分析动力学建模仿真

高质量的轴承在正确的使用下,可以使用很长一段时间,如果过早的出现损伤,很可能是因为选型错误,使用不当或润滑不良造成的。因此,在安装轴承时,我们需要记录机器种类,安装部位,使用条件及周围配合。通过研究总结轴承损伤的类型,发生问题时的使用环境,以避免类似情况再次发生。轴承损伤方式按下述图片分类,我们可以图片中显示的主要特征来判断轴承损伤形式。01、压痕碰伤卡入固体异物或冲击造成的表面凹坑及安装是的擦伤◆固体异物侵入◆在倾斜状态下安装◆安装不良造成的撞击,脱落◆卡入剥离片◆改善安装、使用方法。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 2667

【Android】Activity的生命周期

Activity的生命周期 1.返回栈 其实Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity的集合,这个栈也被称作返回栈(back stack)。栈是一种后进先出的数据结构,在默认情况下,每当我们启动了一个新的Activity,它就会在返回栈中入栈,并处于栈顶的位置。而每当我们按下Back键或调用finish()方法去销毁一个Activity时,处于栈顶的Activity就会出栈,前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于

2303_79296612的博客 2795

Open3D 点云转深度图像【2026最新版】

python版本Open3D 实现的点云转深度图像,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 2838

学Simulink--机器人基础关节控制场景实例:基于Simulink的无刷直流电机(BLDC)关节六步换相位置控制仿真

本文详细介绍了基于Simulink的BLDC六步换相位置控制仿真方法,针对机器人关节的低成本控制需求。重点阐述了霍尔定位、六步换相和位置闭环三大核心原理,通过Simulink建模实现了从霍尔信号处理到位置环控制的全流程。仿真结果表明,该系统可实现0.3°的定位精度和80ms的响应时间,满足教育机器人等应用场景需求。文章还提供了核心代码模块和参数设置方法,并探讨了转矩脉动抑制、无传感器控制等进阶优化方向,为低成本机器人关节驱动提供了实用解决方案。

amy_mhd的博客 154

【小王的安卓之路】Android安卓入门之Activity(活动)及其生命周期

- 1.Activity是什么? - 2.Activity的七大生命周期 - 3.Activity的生老病死 - 4.多个Activity交互时生命周期的变化 - 5.Activity的主要作用

小王的学习blog 4万+

图神经网络实战(2)——图论基础

图论 (Graph theory) 是数学的一个基本分支,涉及对图研究。图是复杂数据结构的可视化表示,有助于理解不同实体之间的关系。图论提供了大量建模和分析现实问题的工具,如交通系统、社交网络和互联网等。在本节中,将介绍图论的基本原理,主要涉及三个方面:图属性、图概念和图算法。

盼小辉丶的博客 1万+

Android的Activity之生命周期

Activity是一个应用组件,用户可与其提供的屏幕进行交互,以执行拨打电话、拍摄照片、发送电子邮件或查看地图等操作。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。 一个应用通常由多个彼此松散联系的 Activity 组成。 一般会指定应用中的某个 Activity 为“主”Activity,即首次启动应用时呈...

yu314092706的专栏 8668

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android activity的生命周期

 Android activity的生命周期activity类处于android.app包中,继承体系如下: 1.java.lang.Object 2.android.content.Context 3.android.app.ApplicationContext 4.android.app.Activityactivity是单独的,用于处理用户操作。几乎所有的

hpoi的专栏 18万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【超详细】(安卓开发)使用Logcat实验对比安卓中Activity的生命周期

本文主要使用Logcat对比验证了安卓中Activity组件的生命周期

2202_75440587的博客 1125

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

一文读懂Activity、Fragment和Service的生命周期

了解不同组件的生命周期有助于开发人员更好地掌握应用程序的行为,从而优化应用程序的用户体验和性能。例如,当用户旋转设备时,Activity 会重新创建,因此开发人员需要保存活动状态并在必要时还原它们。类似地,当内存不足时,系统可能会销毁 Activity、Fragment 和 Service,因此应用程序需要能够正确地处理这种情况,以避免崩溃和数据丢失。理解生命周期还有助于开发人员有效地管理资源。例如,使用 Service 可以在后台操作,而无需活动存在。

WriteBug001的博客 1229

Android开发Activity生命周期详解

本文详解Android开发Activity生命周期。

qq_30725967的博客 2205

Android安卓中Activity活动生命周期

文章目录前言活动的状态常规情况下的生命周期典型情况下的生命周期一些例外情况的生命周期异常情况下的生命周期总结 前言 Activity作为安卓四大组件之一,平常我们接触得最多得也是activity,所以很有必要详细了解一下他的详细生命周期。这篇文章定位是有一点安卓基础的,所以还完全不了解的可以先去学习一下activity。这篇文章主要是讲活动的生命周期。 活动的生命周期,人有胎儿期,青春期,老年期一...

一只修仙的猿 668

Android Activity生命周期

1.activity Activity是由Activity栈管理,当来到一个新的Activity后,此Activity将被加入到Activity栈顶,之前的Activity位于此Activity底部。Acitivity一般意义上有四种状态: ①当Activity位于栈顶时,此时正好处于屏幕最前方,此时处于运行状态; ②当Activity失去了焦点,但仍然对用户可见(如栈顶的Activity是透明的或者栈顶Activity并不是铺满整个手机屏幕),此时处于暂停状态; ③当Activity被其他Activity

zenmela2011的专栏 7089
上一篇: Android增量更新
下一篇: 【Android WebSocket】状态管理框架 - WebSocketGo
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值