Android 进阶一:Activity 的生命周期

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

正文

在这里插入图片描述

典型情况下的生命周期
7个生命周期
onCreate :Activity 正在被创建
初始化布局和数据

onRestart :Activity 正在重新启动,从不可见变为可见状态
从 Home 或者新 Activity 返回旧 Activity

onStart :Activity 正在被启动,已经显示出来,但是没有出现在前台
无法和用户交互

onResume :Activity 已经可见了,显示到前台
可以交互

onPause :Activity 正在被停止
可以做存储数据、停止动画等操作
但不能做耗时操作,因为 onPause 执行完才会执行新 Activity 的 onResume

onStop :Activity 即将停止
可以做稍微重量级的回收
但同样不能太耗时 ?why

onDestroy :Activity 即将被销毁
回收和最终的资源释放

一些特殊情况
1.A 中启动 B,如果 B 是透明主题,A 的 onStop 不会被调用 ???

2.从 B 中返回 A,A 的生命周期:onRestart -> onStart -> onResume

3.onStart 和 onStop 在该 Activity 是否在可见时回调;
而 onResume 和 onPause 则在 Activity 是否在前台时回调。

注:
“可见”只是说显示,但不一定是用户可以看到、交互;
“前台”就是看得见、摸得着。

4.如何实现点击返回键,Activity 的 onDestroy 不被执行?

在所在的 Activity 中重写 onKeyDown() 方法,拦截返回事件,然后调用 moveTaskToBack() 方法:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK){
moveTaskToBack(true); //将当前 Activity 的 Task 放到 Activity 栈的后边
return false;
}
return super.onKeyDown(keyCode, event);
}

5.Activity 的启动流程简述:

Instrumentation 处理启动 Activity 的请求,然后通过 Binder 将请求发给 AMS
AMS 维护着一个 ActivityStack 并负责栈中 Activity 的状态管理
AMS 通过 ActivityThread 去同步 Activity 的状态,从而完成生命周期的调用
Activity 的 Task 和 栈的概念?

异常情况下的生命周期
系统回收或者当前设备 Configuration 改变导致 Activity 被销毁重建的情况。

异常状态保存/恢复方法
在系统配置发生改变时,默认情况下 Activity 会被销毁重建。

异常终止的情况下会调用 onSaveInstanceState() 方法,重新创建后会调用 onRestoreInstanceState():

状态保存调用顺序:onPause -> onSaveInstanceState -> onStop
状态恢复调用顺序:onStart -> onRestoreInstanceState - >onResume
数据通过键值对的形式保存到 Bundle 中
数据恢复在 onCreate 或者 onRestoreInstanceState 中进行都可以,但是官方文件建议在 onRestoreInstanceState 中,因为它被调用时 bundle 一定是有值的,不需要判断。

系统自动做的保存/恢复工作
在 Activity 的异常情况下,系统会这两个保存、恢复方法中为我们做一定的工作,比如保存当前 Activity 的视图结构(View 的状态)。

Activity 异常终止时,系统保存 View 状态的流程简述:

Activity 调用 onSaveInstanceState 保存数据
然后 Activity 委托 Window 保存数据
Window 再委托上面的顶级容器保存数据
顶级容器(一般来说是 DecorView)再一一通知它的子元素保存数据
委托思想:上层委托下层去处理一件事。
比如这里的数据恢复,还有 View 的绘制过程、事件分发等。

系统内存不足时,优先杀死低优先级的 Activity
Activity 的三种优先级,从高到低顺序:

前台 Activity
正在和用户交互
优先级最高,最不可能被回收
可见但非前台
比如弹出 Dialog 的 Activity
后台 Activity
已经暂停,执行了 onStop
优先级最低
四大组件的优先级都比较高,因此后台想执行耗时工作时,需要依赖四大组件来保活。
比如讲后台工作放到 Service 中。

指定在某些配置改变时 Activity 不重建
我们可以在 AndroidManifest.xml 中配置 android:configChanges 来指定该 Activity 在哪些系统配置改变时不重新建立。

配置项很多,常用的是这四个:

android:configChanges=“screenSize|orientation|keyboardHidden|locale”

screenSize|orientation 指的是在屏幕旋转和尺寸改变时不重新创建
keyboardHidden 指的是可用键盘的改变
locale 指的是系统语言切换
注意:
从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。
因此,在开发针对 API 级别 13 或更高版本(正如 minSdkVersion 和 targetSdkVersion 属性中所声明)的应用时,若要避免由于设备方向改变而导致运行时重启,则除了 “orientation” 值以外,您还必须添加 “screenSize” 值。

现在,当其中一个配置发生变化时,Activity 不会重启。相反,Activity 会调用 onConfigurationChanged()方法,并且向此方法传递 Configuration 对象,这个对象代表当前所有配置,你可以根据不同配置进行不同的处理:

@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);

// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
    Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
    Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}

}

如果在配置改变时仍使用旧的状态,则可以不实现 onConfigurationChanged()。

后文

更多Android 进阶资料可以扫描免费领取!

目录

img

一、架构师筑基必备技能

1.深入理解Java泛型 2.注解深入浅出 3.并发编程 4.数据传输与序列化 5.Java虚拟机原理 6.高效IO ……img

二、Android百大框架源码解析

1.Retrofit 2.0源码解析 2.Okhttp3源码解析 3.ButterKnife源码解析 4.MPAndroidChart 源码解析 5.Glide源码解析 6.Leakcanary 源码解析 7.Universal-lmage-Loader源码解析 8.EventBus 3.0源码解析 9.zxing源码分析 10.Picasso源码解析 11.LottieAndroid使用详解及源码解析 12.Fresco 源码分析——图片加载流程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ssYMFzmE-1684137918217)(https://docimg3.docs.qq.com/image/UsyU33KyA7r5ekMKwSeO1A.png?w=1080&h=617)]

三、Android性能优化实战解析

1.腾讯Bugly:对字符串匹配算法的一点理解

2.爱奇艺:安卓APP崩溃捕获方案——xCrash

3.字节跳动:深入理解Gradle框架之一:Plugin, Extension, buildSrc

4.百度APP技术:Android H5首屏优化实践

5.支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」

6.携程:从智行 Android 项目看组件化架构实践

7.网易新闻构建优化:如何让你的构建速度“势如闪电”?

…[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNMom3In-1684137918217)(https://docimg2.docs.qq.com/image/EMPhOtqB9madLlgfPqT4Gg.png?w=1080&h=570)]

四、高级kotlin强化实战

1.Kotlin入门教程 2.Kotlin 实战避坑指南 3.项目实战《Kotlin Jetpack 实战》

​ ● 从一个膜拜大神的 Demo 开始

​ ● Kotlin 写 Gradle 脚本是一种什么体验?

​ ● Kotlin 编程的三重境界

​ ● Kotlin 高阶函数

​ ● Kotlin 泛型

​ ● Kotlin 扩展

​ ● Kotlin 委托

​ ● 协程“不为人知”的调试技巧

​ ● 图解协程:suspendimg

五、Android高级UI开源框架进阶解密

1.SmartRefreshLayout的使用 2.Android之PullToRefresh控件源码解析 3.Android-PullToRefresh下拉刷新库基本用法 4.LoadSir-高效易用的加载反馈页管理框架 5.Android通用LoadingView加载框架详解 6.MPAndroidChart实现LineChart(折线图) 7.hellocharts-android使用指南 8.SmartTable使用指南 9.开源项目android-uitableview介绍 10.ExcelPanel 使用指南 11.Android开源项目SlidingMenu深切解析 12.MaterialDrawer使用指南 img

六、NDK模块开发

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

相关推荐

从零到一:构建嵌入式Nginx的模块化架构与跨平台部署实战

本文详细介绍了在ARM32架构的RV1126嵌入式设备上,通过交叉编译技术构建模块化Nginx服务器的完整实战流程。涵盖环境配置、依赖库编译、Nginx核心与http_ssl_module等模块集成、性能优化及部署调试,为嵌入式开发提供高效可靠的Web服务器解决方案。

rock5的博客 202

【Android Activity】Activity的生命周期

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

dev晴天的博客 1万+

playwright-mcp 安装使用的详细教程

Playwright MCP 快速入门指南 Playwright MCP Server 是由微软开发的浏览器自动化服务,通过 MCP 协议为 AI/Agent/LLM 提供网页交互能力。它基于可访问性树而非屏幕截图,支持多种浏览器和运行模式。 安装要求: Node.js v18+ 命令行操作能力 支持 MCP 的客户端 安装方式: 通过 npx 快速启动:npx @playwright/mcp@latest 项目依赖安装:npm install @playwright/mcp 主要特性: 支持 Chrome

上善若水 7985

Activity生命周期onDestroy

介绍Activity生命周期的文章网上有很多了。 本文重点介绍下onDestroy执行的一些场景。 先看下生命周期流程图 容易被开发者忽略的就是,onDestroy方法,在App被强制杀死时,是不会执行的。 最近集成第三方sdk时遇到一个现象,通过判断onDestroy方法执行,来避免了重大bug。 例子: ActivityA 是我项目的主界面 ActivityB 是第三方sdk项目主界面 Ac...

weixin_33881753的博客 1673

ubuntu虚拟机搭建OP-TEE

在网上找了一些搭建OP-TEE的过程,模仿着进行搭建,结果有好多报错,为了方便自己以后重新搭建,所以将整个过程记录下来。

weixin_44213847的博客 1000

安卓笔记6.Activity生命周期与启动模式

1、onCreate()回调方法系统首次创建 Activity 时触发,同时还以Bundle形式存储以前的状态。2、onRestart()回调方法重新启动Activity调用,该Activity在堆栈中,而不是创建一个新Activity。3、onStart()回调方法当 Activity 进入“已开始”状态时,系统会调用此回调。调用onStart()方法使Activity对用户可见,因为应用会为 Activity 进入前台并支持互动做准备。

justin02191004的博客 278

FDTD远场分析实战:从monitor数据到3D远场可视化的完整流程

本文详细介绍了FDTD远场分析的完整流程,从monitor采集的近场数据出发,通过近场-远场变换(NFFFT)生成3D远场可视化结果。文章重点解析了远场转换的物理原理、关键参数设置,并提供了构建稳健数据处理流水线及高级可视化(如3D辐射方向图)的实战脚本与技巧,适用于天线设计与光学器件分析。

weixin_29063035的博客 228

android activity生命周期(一)onCreate和onDestroy方法

首先我们来说一下什么是生命周期 平时我们在开发软件的时候软件就有生命周期,同样 很多的事物都有自己的生命周期 一般来说 生命是不由自己的主观意识控制的。 举个例子 :人的生命周期:从出生——》到长大——》到死亡 这是一个人的生命周期 而我们的activity也是有生命周期的:被创建——>被开始——>被可视——>被暂停——>被停止——>被销毁 这就是activity的...

qq_40967402的博客 1万+

Cadence 批量一次性修改title 页码标题

本文介绍如何在Cadence软件中对DSN文件进行标题栏的批量编辑操作,包括选择编辑对象、使用快捷键打开属性面板以及如何修改标题、页码等关键信息。

tianpu2320959696的博客 975

PCIe-Orders set Blocks之symbol对齐

有序集的使用场合很多,如在链路link阶段,进入polling后,便开始有序集的发送。一个 Ordered Set Block 包含一个同步头,后跟一个有序集。多通道链路的所有 Lane 必须同时传输相同的有序集,而且有序集的第一个符号定义了有序集的类型。但在PCIE中,8GT/s及以上的速率,采用的是128b/130b编码。128-bit是想要传输的payload,实际会传输130-bit,多出来的2-bit就是sync header。Block有两种,通过Sync header区分:10b:表示data

weixin_44700185的博客 813

Android Activity生命周期详解

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

李家大大大公子 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Android】Activity的生命周期

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

2303_79296612的博客 2794

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

小王的学习blog 4万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Android】安卓四大组件之活动(Activity) 详解:从基础到进阶

在安卓应用开发的世界里,Activity 作为安卓四大组件之一,是用户与应用进行交互的重要窗口,它承载着应用的界面展示与用户操作响应功能。无论是打开一款 APP 看到的主界面,还是点击按钮后弹出的新页面,都是 Activity 在发挥作用。本文将深入剖析 Activity,带你全面了解它的原理、使用方法及进阶技巧

m0_59734531的博客 3871

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

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

2202_75440587的博客 1125

Android的Activity之生命周期

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

yu314092706的专栏 8666

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万+

Android开发Activity生命周期详解

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

qq_30725967的博客 2205

Android Activity生命周期

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

zenmela2011的专栏 7089

Android安卓中Activity活动生命周期

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

一只修仙的猿 668

Android进阶之Activity生命周期+Activity难点

1 Activity的生命周期图   只有Activity之间的转换才会调用生命周期函数。 2 Activity的生命周期调用解析 2.1 半遮挡情况 onPause: Called when the system is about to start resuming another activity.   在启动一个半遮挡或者透明的Activity放置在栈顶时,当前Activ...

chenliguan的博客 1068

android Activity生命周期总结

前言:最开始学这个的时候,我还在想为什么要学生命周期,为什么要去了解它呢,我只要知道怎么让一个界面跳转到另一个界面不就行了吗?,举个栗子,假如你是一名医生,有一天有病人来你这里治病,你不可能就告诉它你有病,或者说你没病吧。 一:本节知识点 二:Activity生命周期状态 图片来源与来自这里 就通过一张图可能不容易理解吧,那举个栗子吧 栗子:新建一个安卓项目,在后端添加以下代码(添加日志打印,...

孤夜的博客 3851

安卓生命周期-activity生命周期详解

activity的生命周期详细解释,按照官方文档结合个人理解

qq_69194611的博客 1102

Android进阶(一) Activity 的生命周期详解

接触Android已经有两年了,总感觉自己停留在某个阶段已经很久了,应该会有好多人和我有相同的感觉吧,是时候去吸收一波知识了,任玉刚大神的《Android 开发艺术探索》是一本非常不错的进阶书籍(推荐大家买来拜读一下)。这是我第二遍去看这本书了,第一次是我刚刚开始实习,好多知识都是迷迷糊糊的看过了,经过一年的学习和工作,第二次有了不同的体验!拿出来和大家一起共享和学习。 随后会根

神奇的蓝胖子的博客 500
上一篇: 「2023」面试必看,Android大厂面试必问题及答案
下一篇: Android 进阶二:Activity 的 Task 与启动模式
网络安全-XG
博客等级 码龄5年 1万+粉丝 2752原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值