Activity启动流程分析

Activity 启动流程分析 和你一起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:一、Android Acitvity启动流程概览二、启动流程中AMS内的各个角色三、AMS跨进程通信创建Activity,第一步四、ActivityStarter 正式开始启动Activity五、startActivityMayWait六、startActivity处理ActivityInfo转化为Acti... 阅读详情


一、activity跨进程启动

app启动流程

  • 点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求
  • system_server进程接收到请求后,向zygote进程发送创建进程的请求;
    Zygote进程fork出新的子进程,即App进程
  • App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  • system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进 程发送scheduleLaunchActivity请求
  • App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息
  • 主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法

二、activity进程内启动

1.相关类

  • ActivityThread:main()函数,相当于一个Handler,主线程,UI线程
  • ApplicationThread:与AMS沟通桥梁
  • mInstrumentation:通过这个api启动app,用来跟踪Activity和Application生命周期的类
  • AMS:数据管理者

2.启动流程

请求进程A:startActivity—(hook插入点1) (AMP,ActivityManager代理对象)——> system_server进程:AMS(ActivityManagerService)解析Activity信息、处理启动参数、scheduleLaunchActivity/mH中EXECUTE_TRANSACTION消息处理(Android P)–>回到请求进程A:ApplicationThread --> ActivityThread -(hook插入点2)-> Activity生命周期

简单点来说就是通过AMS代理类,封装创建Activity的信息,然后回调给ActivityThread,通过mInstrumentation创建Activity,调用onCreate方法启动Activity


三、显式启动和隐式启动

1.显式启动

1、构造方法传入Component,最常用的方式
2、setComponent(componentName)方法
3、setClass/setClassName方法

2.隐式启动

隐式Intent是通过在AndroidManifest文件中设置action、data、category,让系统来筛选出合适的Activity

		<activity
            android:name="com.juexiao.fakao.ui.activity.WelcomeActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            
            <intent-filter>
        		<action android:name="com.jrmf360.action.ENTER"/>
        		<category android:name="android.intent.category.DEFAULT"/>
        		<data
            		android:host="jrmf360.com"
            		android:port="8888"
            		android:scheme="jrmf"/>
    		</intent-filter>
        </activity>

action匹配规则

  • Intent-filter action可以设置多条
  • intent中的action只要与intent-filter其中的一条匹配成功即可,且intent中action最多只有一条
  • Intent-filter内必须至少包含一个action

category匹配规则

  • Intent-filter内必须至少包含一个category,android:name为android.intent.category.DEFAULT
  • intent-filter中,category可以有多条
  • intent中,category也可以有多条
  • intent中所有的category都可以在intent-filter中找到一样的(包括大小写)才算匹配成功

data匹配规则

  • intent-filter中可以设置多个data
  • intent中只能设置一个data
  • intent-filter中指定了data,intent中就要指定其中的一个data

Activity启动流程概述 对于通过点击应用图标启动activity的场景说,AMS在这一步中没回调用startProcessLocked来创建一个新的进程,而对于通过在内部启动新的activity来说,这一步不需要执行,因为新的activity就在原来的activity所在的进程中启动。无论是通过Launcher启动,还是通过activity 内部来调用startActivity接口 来启动新的activity,都是通过Binder进程间通信进入到AMS进程中,并且调用AMS.startActivity 接口。 阅读详情

相关推荐

Activity的启动流程分析与总结

前言 ​看了数片分析Activity启动流程的文章,但是自从看了《Android进阶解密》关于Activity启动流程的分析,我就放弃了自己撸一遍的念头。因为书里关于这部分的分析比较详细。这里记录一下书中关于Activity的启动流程。加深一下印象,便于以后温习查看。 Activity的启动过程分为两种,一种是根Activity的启动过程,可以认为是初次点击桌面的应用图标,启动Manifest中注册的作为应用的启动页面的Activity。根Activity的启动过程也可以理解为应用程序的启动过程。另一种就是

天亮了的博客 3957

Activity 的启动流程(Android 13)

Activity 的启动过程分为两种:一种是普通 Activity 的启动过程,另一种是根 Activity 的启动过程。普通 Activity 指的是除应用程序启动的第一个 Activity 之外的其他 Activity。

xingyu19911016的博客 2万+

Android Activity 启动流程分析_android activity工作流程

/根据前面传入的参数解析一下必要的信息,并开始启动 Activity。//通过 Binder 调用 ATMS 启动 Activity。* ActivitySatrter 最大数量。//检测Activity启动的权限。//设置 Activity 的栈。//应用端 AIDL 实现类。//处理生命周期状态。//处理生命周期状态。//执行生命周期状态。

2501_90225886的博客 963

面试:Activity的启动流程简述

Activity的启动的整体流程: 1. Launcher进程请求AMS 2. AMS发送创建应用进程请求 3. Zygote进程接受请求并孵化应用进程 4. 应用进程启动ActivityThread 5. 应用进程绑定到AMS 6. AMS发送启动Activity的请求 7. ActivityThread的Handler处理启动Activity的请求 面试必备:Android(9.0)Activity启动流程(一) - 掘金 面试必备:Android(9.0)Activity启动流程(二

王温暖的博客 6195

Activity 的启动流程分析 (基于 Android 8.1 )

0. 前言 Activity 组件的启动流程在 Android 8.0 版本以后得到了很大程度上的变更,很多类或方法已经废弃不用,本人参考最新源代码与指导书籍重新分析 Activity 启动流程,其中大都是自己的观点,如有错误,烦请不吝赐教。 1. 启动调用 作为android四大组件之一,同时也是唯一可被用户感知的部分, Activity 的作用和地位毋庸置疑,而实际开发中,我们要启动...

bestcxcxj的博客 2560

图解Activity启动流程

看一百遍不如做一遍,道理都懂,那么赶紧做出第一步吧!

Android小码家 3506

Android | Activity 启动流程分析

Activity类是 android 应用的关键组件,在日常开发中,绝对少不了组件。既然用了这么久,你知道他的启动流程🐴?作为一个应用层开发者,大多数人可能觉得学习这些对日常开发可能没有太大帮助。但是多了解一下 framework 的代码还是很有必要的,了解系统组件机制,对于一些问题我们也能快速的定位找到问题的所在点,并且在面试的时候也是一个加分项。本文基于 Android 12 版本源码,从作为切入点,对整个启动流程进行分析。

Android_XG的博客 1900

佳能C3025打印机扫描方法

佳能C3025彩色打印机扫描方法 步骤一、如果打印机处于休眠状态,可按图中标记的按钮唤醒打印机; 然后点击屏幕上的【扫描】 步骤二、扫描类型选择【文件】 步骤三、点击屏幕上的【地址簿】 步骤四、此时屏幕胡看到名字,如果看不到自己的名字,可往下滑动直到看到自己的名字,然后点击自己的名字,再点击右下角的【应用】 步骤五、点击【发送设置】,可看到文件格式为PDF,点击可以选择JPEG的图片格式。...

weixin_46019317的博客 2万+

【Android 14源码分析】Activity启动流程-2

在 Launcher 进程构建了启动参数放在了 ActivityOption 中,然后通过 Bundle 传递给 system_service 端AMS 先解析参数,放在了 Request 这个类中保存AMS 构建出一个 ActivityRecord ,这个类在 system_service 端就代表着 Activity ,同时也是一个窗口容器再构建出一个 Task 挂载到窗口树上。

隔壁小王的博客 2789

【photoshop CEP插件】 OCR文字识别

一个photoshop CEP插件OCR文字识别 APP_ID = 17594920 API_KEY = puMFv72xqCYV2jdcSlXgtFvm SECRET_KEY = v5XHtqKXEm0p6ehPZrXIXrftDvocyv1m /*********************************************/ 百度OCR 密钥由Greless@qq.com 提供, 用户可自行前往https://ai.baidu.com/docs#/Auth/top 申请。 通用文字识别..

Greless的后花园 6487

从Live2D到Unreal Engine:2D与3D虚拟数字人核心技术实现路径解析

本文深入解析了从Live2D到Unreal Engine的2D与3D虚拟数字人核心技术实现路径,涵盖技术选型、制作流程与优化技巧。通过对比2D骨骼动画与3D建模渲染的差异,结合实战案例,帮助开发者根据项目需求选择合适方案,提升虚拟数字人的交互体验与视觉效果。

weixin_30379531的博客 149

Activity启动流程源码分析

前言 最近在查看Android中Activity的源码时候,发现和之前印象中的不太一样,主要是和Android8.0的区别比较大,所以就干脆用最新的Android10的源码整理出来。 至于为什么要阅读源码,这个在我看来最主要的原因有两个,第一是因为我们不仅要知其然,还要知其所以然,这样才能 为什么要阅读源码 ? 因为我们不仅要知其然,还要知其所以然,这样才能在开发中快速高效的定位问题,游刃有...

周将的博客 1238

Simeck算法流程

算法流程 paper在此:https://eprint.iacr.org/2015/612.pdf x ⋘\lll⋘ c denotes the cyclic shift of x to the left by c bits. x & y is the bitwise AND of x and y. x⊕yx \oplus yx⊕y is the exclusive-or (XOR) of x and y. github代码在此:https://github.com/bozhu/Simeck

Simp123 1074

activity启动流程分析

activity启动流程分析 1.相关代码文件路径: \frameworks\base\core\java\android\app\ContextImpl.java \frameworks\base\core\java\android\app\ActivityThread.java \frameworks\base\core\java\android\app\Instrumentation...

搬砖的老牛 445

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

ARINC 653 在综合模块化航空电子设备(IMA)的发展进程中扮演着极为关键的角色。从行业应用的实际情况来看,空客 A380 和波音 787 等先进飞机的航电系统套件充分体现了行业对 IMA 的高度重视和积极投入。在 IMA 架构下,核心软件具备强大的能力,能够支持多个航空电子应用程序的同时运行。这些应用程序可以并行开发,并高效地部署在同一个计算平台上,极大地提高了开发效率和系统集成度。ARINC 653 的出现为航空电子行业创造了一个充满活力和竞争力的商业环境。

2956

扫地机器人设计与实现——基于嵌入式系统的智能家居解决方案

本文介绍了基于嵌入式技术的扫地机器人设计与实现。通过利用STM32单片机、传感器、驱动系统等硬件组件,并结合路径规划与控制算法、远程控制等软件技术,设计出了一款具有智能避障、路径规划、自动充电等功能的扫地机器人。系统的开发不仅提高了清洁效率,也为进一步研究和优化扫地机器人提供了实践基础。

2201_76125393的博客 1639

Activity启动流程?基于Api30的Activity启动流程分析

前文:api 29版本Activity启动流程分析 本文将根据Api 30(Android 11)的源码来分析Activity的启动流程。 我个人把Activity的启动流程依次分为三个阶段: App进程中 ——[通过Binder]——> 系统进程中 ——[通过Binder]——> 回到App进程中 下面按顺序进行梳理,主要整理大体脉络,不会大段源码,只展示关键代码。流程图在文末展示。 文章目录一、App进程中1. Activity2. Instrumentation二、系统进程中1. Acti

LittleFogCat的专栏 我的个人网站:https://xiaoniu.tech 683

S7-200 SMART PLC 子程序功能块(阀门控制)

由于S7-200 SMARTPLC的子程序种种功能、容量限制,有时想实现多次调用的子程序可能并不是太容易,这篇博客还是给出一些推荐写法,供大家参看。

RXXW_Dor的博客 8066

Android的Activity启动流程分析

-------------------------------------------------------------------------------------------------------------------------------------------------------------------...

grandself的博客 4万+

SAP HANA 的一个王炸技能,Smart Data Access

SAP HANA Cloud近期推出Knowledge Graph Engine(KGE),支持RDF三元组存储和SPARQL查询,与向量引擎等组件协同实现混合检索。同时文章介绍了HANA的Smart Data Access(SDA)功能,它通过虚拟表技术实现跨系统联邦查询,支持30+种数据源(不包括PostgreSQL),适用于混合云场景。SDA通过谓词下推优化性能,典型应用包括冷热数据分层和跨系统报表分析。对于PostgreSQL连接需求,建议使用HANA的Smart Data Integration方

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Activity 启动流程分析(Android10)

概览 Activity 启动流程比较复杂,分析起来很容易陷入复杂的代码中去,所以我这篇分析文章不会深入的分析代码细节,尽量抛开不重要的东西把启动流程按照重点分成几个部分来分析。 下图是 Activity 启动流程的总览。 (上图红色方块是与 WMS 关联的部分,后面会从这里开始介绍 WMS) 后面我们将以 Android 29 为例,按照上图步骤逐步分析。 Intent 解析到 Activity 调用 startActivity 之后,经过几步辗转最终会调用到 AMS 中,而 AMS 又会调用 Activ

张可的博客 4611

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android4.4 Activity启动流程分析

Android4.4 Activity启动流程分析 $ adb logcat -v time -s ActivityManager  --------- beginning of /dev/log/main  --------- beginning of /dev/log/system  07-01 08:35:20.039 V/ActivityManager( 844): Broadca

shatelang的专栏 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android 11 Activity启动流程分析

Android 11 Activity启动流程分析 本片文章是基于Android 11版本来分析应用Activity的启动的,Activity是Android四大组件中最重要的一个,因为我们所有的页面基本上都是基于Activity开发的,所以了解Activity是怎么启动的是很有必要的,接下来我们就来分析一下Activity的启动流程。 Activty启动调用时序图 下面我们就来根据这张时序图来具体看一下代码中的调用流程 我们一般在开发中会用下面的方法来启动一个Activity,那我们分析源码的如果其实就

guojingbu的博客 2987
上一篇: activity启动模式介绍
下一篇: Unsupported Java. Your build is currently configured to use Java 17.0.6 and Gradle 7.0.2.
浮空over
博客等级 码龄7年 6粉丝 33原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值