腾讯大牛:你根本不懂Activity!

FastApi教程 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 阅读详情

在之前的Activity篇主要学习Activity的生命周期、创建和页面跳转的实现,本篇将深入了解Activity,学习清单:

  • 生命周期全解析

  • 四种启动模式

  • IntentFilter匹配规则

一. 生命周期全解析

1.问:典型情况下Activity生命周期
a.onCreate():

  • 状态:Activity 正在创建

  • 任务:做初始化工作,如setContentView界面资源、初始化数据

  • 注意:此方法的传参Bundle为该Activity上次被异常情况销毁时保存的状态信息。

b.onStart():

  • 状态:Activity 正在启动,这时Activity 可见但不在前台,无法和用户交互。

c.onResume():

  • 状态:Activity 获得焦点,此时Activity 可见且在前台并开始活动。

d.onPause():

  • 状态: Activity 正在停止

  • 任务:可做 数据存储、停止动画等操作。

  • 注意:Activity切换时,旧Activity的onPause会先执行,然后才会启动新的Activity。

e.onStop():

  • 状态:Activity 即将停止

  • 任务:可做稍微重量级回收工作,如取消网络连接、注销广播接收器等。

  • 注意:新Activity是透明主题时,旧Activity都不会走onStop。

f.onDestroy():

  • 状态:Activity 即将销毁

  • 任务:做回收工作、资源释放。

g.onRestart():

  • 状态:Activity 重新启动,Activity由后台切换到前台,由不可见到可见。

onStart()和onResume()、onPause()和onStop()的区别: onStart与onStop是从Activity是否可见这个角度调用的,onResume和onPause是从Activity是否显示在前台这个角度来回调的,在实际使用没其他明显区别。

2.Activity生命周期的切换过程

①启动一个Activity:

onCreate()-->onStart()-->onResume()

②打开一个新Activity:

旧Activity的onPause() -->新Activity的onCreate()-->onStart()-->onResume()-->旧Activity的onStop()

③返回到旧Activity:

新Activity的onPause()-->旧Activity的onRestart()-->onStart()-->onResume()-->新Activity的onStop()-->onDestory();

④Activity1上弹出对话框Activity2:

Activity1的onPause()-->Activity2的onCreate()-->onStart()-->onResume()

⑤关闭屏幕/按Home键:

Activity2的onPause()-->onStop()-->Activity1的onStop()

⑥点亮屏幕/回到前台:

Activity2的onRestart()-->onStart()-->Activity1的onRestart()-->onStart()-->Activity2的onResume()

⑦关闭对话框Activity2:

Activity2的onPause()-->Activity1的onResume()-->Activity2的onStop()-->onDestroy()

⑧销毁Activity1:

onPause()-->onStop()-->onDestroy()

参考文章:实际体验Activity生命周期(https://djun100.iteye.com/blog/2079943)

3.问:生命周期的各阶段

a.完整生命周期:

Activity在onCreate()和onDestroy()之间所经历的。
在onCreate()中完成各初始化操作,在onDestroy()中释放资源。

b.可见生命周期:

Activity在onStart()和onStop()之间所经历的。
活动对于用户是可见的,但仍无法与用户进行交互。

c.前台生命周期:

Activity在onResume()和onPause()之间所经历的。
活动可见,且可交互。

4.onSaveInstanceState和onRestoreInstanceState
 

a.出现时机:异常 情况下Activity 重建,非用户主动去销毁

b.系统异常终止时,调用onSavaInstanceState来保存状态。该方法调用在onStop之前,但和onPause没有时序关系。

onSaveInstanceState与onPause的区别:前者适用于对临时性状态的保存,而后者适用于对数据的持久化保存。

c.Activity被重新创建时,调用onRestoreInstanceState(该方法在onStart之后),并将onSavaInstanceState保存的Bundle对象作为参数传到onRestoreInstanceState与onCreate方法。

可通过onRestoreInstanceState(Bundle savedInstanceState)和onCreate((Bundle savedInstanceState)来判断Activity是否被重建,并取出数据进行恢复。但需要注意的是,在onCreate取出数据时一定要先判断savedInstanceState是否为空。另外,谷歌更推荐使用onRestoreInstanceState进行数据恢复。

5.Activity异常情况下生命周期分析

a.由于资源相关配置发生改变,导致Activity被杀死和重新创建
例如屏幕发生旋转:当竖屏切换到横屏时,会先调用onSaveInstanceState来保存切换时的数据,接着销毁当前的Activity,然后重新创建一个Activity,再调用onRestoreInstanceState恢复数据。

onSaveInstanceState-->onPause(不定)-->onStop-->
onDestroy-->onCreate-->onStart-->onRestoreInstanceState-->onResume

为了避免由于配置改变导致Activity重建,可在AndroidManifest.xml中对应的Activity中设置android:configChanges="orientation|screenSize"。此时再次旋转屏幕时,该Activity不会被系统杀死和重建,只会调用onConfigurationChanged。因此,当配置程序需要响应配置改变,指定configChanges属性,重写onConfigurationChanged方法即可。

b.由于系统资源不足,导致优先级低的Activity被回收
 

①Activity优先级排序:

前台可见Activity>前台可见不可交互Activity(前台Activity弹出Dialog)>后台Activity(用户按下Home键、切换到其他应用)

②当系统内存不足时,会按照Activity优先级从低到高去杀死目标Activity所在的进程。

③若一个进程没有四大组件在执行,那么这个进程将很快被系统杀死。

 

二. Activity四种启动模式

1.问:设置Activity启动模式的方法

  • a.在AndroidManifest.xml中给对应的Activity设定属性android:launchMode="standard|singleInstance|single Task|singleTop"。

  • b.通过标记位设定,方法是intent.addFlags(Intent.xxx)。

2.问:Activity的四种LaunchMode

a.standard:标准模式、默认模式

  • 含义:每次启动一个Activity就会创建一个新的实例。

  • 注意:使用ApplicationContext去启动standard模式Activity就会报错。因为standard模式的Activity会默认进入启动它所属的任务栈,但是由于非Activity的Context没有所谓的任务栈。

b.singleTop:栈顶复用模式

  • 含义:如果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调onNewIntent(intent)方法。

c.singleTask:栈内复用模式

  • 含义:只要该Activity在一个任务栈中存在,都不会重新创建,并回调onNewIntent(intent)方法。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,并把该Activity放进去;如果存在,就会创建到已经存在的栈中。

d.singleInstance:单实例模式

  • 含义: 具有此模式的Activity只能单独位于一个任务栈中,且此任务栈中只有唯一一个实例。、

标识Activity任务栈名称的属性:android:taskAffinity,默认为应用包名。

3.常用的可设定Activity启动模式的标记位

①FLAG_ACTIVITY_SINGLE_TOP:对应singleTop启动模式。

②FLAG_ACTIVITY_NEW_TASK :对应singleTask模式。

三. IntentFilter匹配规则

原则:①一个intent只有同时匹配某个Activity的intent-filter中的action、category、data才算完全匹配,才能启动该Activity。
② 一个Activity可以有多个 intent-filter,一个 intent只要成功匹配任意一组 intent-filter,就可以启动该Activity。

a. action匹配规则:

  • 要求intent中的action 存在且必须和intent-filter中的其中一个 action相同。

  • 区分大小写。

b. category匹配规则:

  • intent中的category可以不存在,这是因为此时系统给该Activity 默认加上了< category  android:name="android.intent.category.DEAFAULT" />属性值。

  • 除上述情况外,有其他category,则要求intent中的category和intent-filter中的所有category 相同。

c. data匹配规则:

  • 如果intent-filter中有定义data,那么Intent中也必须也要定义date。

  • data主要由mimeType(媒体类型)和URI组成。在匹配时通过intent.setDataAndType(Uri data, String type)方法对date进行设置。

采用隐式方式启动Activity时,可以用PackageManager的resolveActivity方法或者Intent的resolveActivity方法判断是否有Activity匹配该隐式Intent。

需要Android进阶资料可以加群:4112676

【OpenClaw从入门到精通】第11篇:OpenClaw 2026多模态实战全攻略:OCR/语音/图像自动化(附完整代码+双部署方案) 本文聚焦OpenClaw 2026版核心升级的多模态能力,从底层架构原理到实操落地全流程拆解。先解析“统一指令解析+多工具适配器”的核心设计逻辑,再提供阿里云规模化部署(适合批量任务)与本地汉化版部署(适合隐私数据调试)的详细步骤,含依赖安装、配置验证完整操作;随后落地三大高频实战场景——OCR合同信息结构化提取、会议录音自动转写纪要、电商商品图片智能打标,每个场景均提供可直接运行的完整代码、执行结果演示及流程说明;最后补充多模态任务避坑指南、性能优化技巧与成本控制方案。 阅读详情

相关推荐

【TCGA-CRC】TCGA数据读取

本文介绍了如何从TCGA数据库中处理结肠癌(COAD)和直肠癌(READ)的RNA测序数据。首先,通过data.table::fread函数读取基因表达量文件,并检查基因ID和基因名称的一致性。接着,批量读取所有样本的TPM(Transcripts Per Million)数据,并将其合并为表达矩阵。随后,通过匹配样本ID和文件名,确保表达矩阵的列名与样本ID一致。最后,筛选出编码蛋白质的基因,并将处理后的数据保存为Rdata文件。整个过程涉及数据读取、合并、匹配和筛选,为后续的基因表达分析提供了基础。

小八四爱吃甜食的博客 662

重学安卓:Activity 的快乐你不懂!

本文由作者 KunMinX 原创,已授权某公众号独家转载

weixin_34334744的博客 1195

国际参考电离层2020模型Matlab(IRI-2020)

国际参考电离层 (IRI) 是一个国际项目 由空间研究委员会 (COSPAR) 和国际 无线电科学联盟 (URSI)。这些组织组成了一个工作组 (在 60 年代后期产生了电离层的经验标准模型, 基于所有可用数据源 (几个稳步改进的版本 模型已经发布。电子密度、电子温度、离子温度、 离子组成(O+、H+、He+、N+、NO+、O+2、簇离子)、赤道垂直离子漂移、垂直电离层电子含量(vTEC;

weixin_44392003的博客 4880

使用黑科技启动未注册的Activity

/ 今日科技快讯 /近日,苹果公司首席执行官蒂姆·库克否认苹果是一家垄断企业。美国政府正准备对苹果公司展开一场可能前所未有的调查,调查这家iPhone制造商和其他...

郭霖 521

使用 Wireshark 分析 PPPoE 流量中的 BRAS 名称 AC-Name

客户端发出广播请求,寻找 PPPoE 服务器。: BRAS 服务器响应 PADI 请求,提供服务并包含AC-Name。: 客户端选择一个 BRAS 并发起连接请求。: BRAS 确认连接并分配会话 ID。在这些阶段中,AC-Name是 BRAS 提供的一个关键字段,用于标识服务器名称。

caca_66的博客 2066

零成本矩阵玩法:1人运营5个账号的自动化工具链配置(2025全平台实战)

通过“AI内容生产+工具链分发+自动化变现”的组合拳,即使是新手也能实现1人运营5个账号的规模化收益。关键在于选对工具与设计标准化流程。未来,矩阵运营的竞争将聚焦于工具使用效率与数据洞察深度,快人一步者方能抢占先机!

TuFuir的博客 3784

Activity 初步(大部分翻译自SDK)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34240520的博客 339

PyCharm安装PyQt5及工具(Qt Designer、PyUIC、PyRcc)详细教程来了

Qt是常用的用户界面设计工具,而在Python中则使用PyQt这一工具包,它是Python编程语言和Qt库的成功融合。这篇博文通过图文详细介绍在PyCharm中如何完整优雅地安装配置PyQt5的所有工具包,主要内容包括PyQt5、PyQt5-tools的依赖包安装和Qt Designer、PyUIC、PyRcc三个工具的设置。最后简单演示了PyQt5的调用方式及三个工具的使用方法。

Python966的博客 3万+

真香警告:即使不学 OS 进阶,也请务必收藏好该文!

前言 很高兴见到你! 上一期我在掘金发表了《重学安卓:Activity 的快乐你不懂!》,原本只是想给大家一把进阶的钥匙,能够因为文章从 0 到 1 的介绍,而对显示系统大家族 建立起感性的认识、并且埋下好奇的种子 去推动自己继续探究,没想到公众号后台 有不少读者追问是否还有后续。 关于这个问题呢,不要慌,答案就在文章的末尾。 平心而论,我比较倾向于 “从 0 到 1” 的这种思考。一上来就讨...

weixin_34301307的博客 167

TC3XX - MCAL知识点(十一):WDG EB-tresos配置说明与代码浅析

在AUTOSAR中,看门狗栈实现了三种监控机制:实时监控:用于周期软件的定时监控期限监督:针对非周期软件逻辑监督:用于监督执行顺序的正确性看门狗(WDG)驱动实现AUTOSAR(4.2.2)中规定的看门狗SWS,提供初始化、改变操作模式和设置触发条件(超时)等服务,供看门狗硬件(WDT)用户使用。WDG驱动的用户包括:模式管理模块(用于初始化),WdgM通过Wdglf设置触发条件和驱动运行模式设置。WdgM实施上述监督机制。AUTOSAR扩展触发概念,以支持窗口看门狗模式。

梦想技术家 3601

深度剖析OpenHarmony AI Engine:开发板端侧大模型推理插件机制全链路拆解

/ 加载动态库// 获取符号地址// 关闭动态库// 获取错误信息public:// 单例获取// 销毁实例// 加载插件// 卸载插件private:// 获取插件实例// 插件映射锁// 插件映射表public:Plugin();~Plugin();// 加载算法// 卸载算法// 获取算法实例// 设置算法实例private:// 算法接口指针// 动态库句柄// 算法ID// 版本信息// 配置信息字符串int len;

m0_67505153的博客 509

我所理解的Android 启动模式

首先,这是从 一个开源网站转载的,觉得写得不错,对我们之前理解的activity的启动模式是一个新的理解方式,并给出实际的应用场景。 任务栈是什么 任务栈Task,是一种用来放置Activity实例的容器,他是以栈的形式进行盛放,也就是所谓的先进后出,主要有2个基本操作:压栈和出栈,其所存放的Activity是不支持重新排序的,只能根据压栈和出栈操作更...

weixin_33972649的博客 298

基于Claude Code的 规范驱动开发(SDD)指南

传统的AI辅助开发,如同手工作坊,我们向AI描述想法,它给我们零散的部件,我们再手动打磨、组装。这个过程充满了不确定性、信息损耗和重复劳动。本指南将尝试引领您进入软件开发的“工业时代”。在这里,

形上得其象,形下合于数;阴阳自济,玄理自明。 2747

activity生命周期_腾讯大牛:你根本不懂Activity!

码个蛋(codeegg)第 583 次推文作者:厘米姑娘原文:https://www.jianshu.com/p/602b1ec4ca7a在之前的Activity篇主要学习Activity的生命周期、创建和页面跳转的实现,本篇将深入了解Activity,学习清单:生命周期全解析四种启动模式IntentFilter匹配规则一. 生命周期全解析1.问:典型情况下Activity生命周期a.o...

weixin_39620273的博客 88

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

activity 启动模式_腾讯大牛:你根本不懂Activity!

码个蛋(codeegg)第 583 次推文作者:厘米姑娘原文:https://www.jianshu.com/p/602b1ec4ca7a在之前的Activity篇主要学习Activity的生命周期、创建和页面跳转的实现,本篇将深入了解Activity,学习清单:生命周期全解析四种启动模式IntentFilter匹配规则一. 生命周期全解析1.问:典型情况下Activity生命周期a.onCrea...

weixin_39571179的博客 139

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

腾讯大牛,一篇文章教你什么是Android-Fragment-,Android高级架构师筑基必备!

第二个参数是父容器控件;第三个布尔值参数表明是否连接该布局和其父容器控件,在这里的情况设置为false,因为系统已经插入了这个布局到父控件,设置为true将会产生多余的一个View Group。当Fragment被加入Activity中时,它会处在对应的View Group中。Fragment有两种加载方式:一种是在Activity的layout中使用标签声明;另一种方法是在代码中把它加入到一个指定的ViewGroup中。另外,Fragment它可以并不是Activity布局中的任何一部分,它可以是一个不可

2401_84010176的博客 490

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Framework掌握不熟?字节跳动大牛带你系统化学习

面试中Framework与Binder的重要性 Framework 通常作为一个Android APP开发者,我们并不关心Android的源代码实现,不过随着Android开发者越来越多,企业在筛选Android程序员时越来越看中一个程序员对于Android底层的理解和思考,这里的底层主要就是Android Framewok中各个组件的运行原理,例如Binder的运行机制、ServiceManager的作用等等。 在Android面试中,关于 Framework 的问题是必备的,但是这些关于字节跳动

CHAMPION8888的博客 379

Activity的6大难点,你会几个?成功定级腾讯T3-2

作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈: 1.技术视野窄 长期在小型软件公司,外包公司工作,技术视野被限制的太厉害 2.薪资提升难 初中级Android岗位薪资上升空间有限,基本上你想拿15k以上,不会点源码层的东西是根本拿不到的 3.学习资源少 入门之后想要提升很难,靠自己接触的简单业务项目,去反复操练那些cv技术。博客和书本上的技术大多比较抽象并且零散,可以借鉴和指导,但是没办法复制成自己的 有了这份阿里众位P7大神整理的Android开发核心知识笔记,所有的瓶颈通通都能快速打破

m0_56146626的博客 339

Framework掌握不全被面试官怼?这里有一份Android字节大牛整理的Framework内核精编解析笔记与面试解析

和。

2401_84148942的博客 574

Android 面经:我是如何进入大厂腾讯的?(1)

找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。多练。(视频优势是互动感强,容易集中注意力)你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

2401_84149505的博客 788

42岁程序员面试,腾讯大牛教你自己写Android第三方库!面试必问!

开头 大家都知道,找工作的时候高薪不好拿,一般人能拿 30k 的 offer 就不错了。据我所知百分之九十的Android开发都在30k以下! 但是在我的群里有一位同学,平时就喜欢研究源码和框架,然后经过一个月的刷题,跳槽到头条,拿到了 50k 的月薪,我觉得太厉害了,羡慕嫉妒恨啊。 后来我和他聊了下,发现他技术确实好,在刷题期间,除了算法,他还把自己的 Android 笔记拿了出来,里面都是他平时的积累,内容全面,深度也有,有插件化、依赖注入,还有各种架构知识。 果然,只要技术好,走到哪里都不怕啊。大家在

linkedin_57417026的博客 356

腾讯Android开发岗:笑死,一次难忘的面试经历,顺利拿下OFFer!(1)

找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。多练。(视频优势是互动感强,容易集中注意力)你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

2301_82243523的博客 667

【2024版Android面试宝典】,腾讯等大厂Android高级开发面试完全攻略手册!(2)

设个问题涉及的内容很多,下面的版块会展开进行详细讲解。面试流程大厂的部门一般比较多,岗位类型多,职级差异也大,所以大家的面试流程都是不一样的。一般来说,针对高开,大部分的大厂面试都会经历2轮技术面,1轮领导面,1轮HR面,如果面试情况有争议(或者面的特别好的情况)会有一轮加面,总体来讲总共会有4轮面试。以字节为例,基本上所有面试都会在线上进行,一面2轮技术面,2面领导面(也会有一些技术的考察),3面就是HR面谈薪资和定级了。这里图解说一下普适性的面试流程。(PS:面试如打怪升级,大家要先通关前面才能进入后面

2401_84415534的博客 942

某Android大牛预备跳槽,没想到招聘网站却出卖了他,好一手两头通吃。

大家纷纷给求职者出谋划策,有人说招聘网站的在线简历随便瞎填,只有附件简历是真实内容,等遇到合适的再把附件简历发送过去。有人说简历上别写现在的工作内容,等猎头hr找的时候再说简历没更新。有人说可以用之前的简历找工作,看到合适的就加微信发简历。有人说在线简历别写太详细,别用自己的真名全名,可以就留一个姓。不过也有人说这个办法没什么用,招聘系统会直接通过手机号和身份证号来查。还有人问,如果简写公司名字能不能避免被查?或者干脆不写现在的公司。也有人说不用Boss直聘不行吗?自己已经换成拉勾网了。

2401_86637445的博客 1198

安卓系统培训!Android事件体系全面总结+实践分析,成功入职阿里

前言 最近,有同学参加阿里云的面试,被问到:如果是MySQL引起的CPU消耗过大,你会如何优化?他说,这个问题他第一次遇到,当时一头雾水,不知道该如何回答,还好他当时机制,说MySQL底层不是他研究的重点,所以面试官没有再深入这块~~~ 因此,我们在网上找到一篇能够解答该问题的文章,希望能够帮助到各位同学。 一线企业的app都是多线程和多进程的,而Android进程间通信机制就是Binder,原生的线程间通信则是Handler,Binder和Handler是了解安卓运行机制必须要掌握的一个知识点,更是一

chayel123的博客 236
上一篇: SVG图片在移动端的应用解决方案
下一篇: Android 面试 15 家大厂,这个问题是必问!
动脑学院[David]
博客等级 码龄8年 44粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值