Activity启动过程分析

Android Activity底层启动过程分析 借鉴自gityuan大神:http://gityuan.com/2016/03/12/start-activity/ 看了这个图,有个小疑惑,Locked是啥意思,希望在阅读的时候能够得到解决。 还有希望可以记录下每个方法都做了什么。 Activity.startActivity @Override public void startActivity(Intent in 阅读详情

Activity 的启动过程:

1.从startActivty 方法进入跳转至
2.startActivtyforResult() 参数中含有mMainThread.getApplationThread()
这个方法的类型是ApplactionThread 它 是ActivityThread的一个内部类

调用AMS部分
3.执行execStartActivity方法() 这个方法的真正实现者是ActivityManagerNative.getDefault();

继承自ActivityManagerService而AMN 继承自binder 并实现了IActivityManager 这个Binder真正的操作方法在AMS中的startActivity方法中

栈部分
4.在执行execStartActivity 方法中还有一个checkActivityResult();这个方法是用来检测activity 是否正常启动当无法正常启动时则会报出异常信息。
5.由此进入至 ActivityStackSupervisor中
6.执行startActivityMayWait
7.执行StartActivityLocked
8.执行StartAcitityUncheackLocked
9.进入ActivityStack 中
10.执行resumeTopActivityLocked
11.回到ActivityStakSuperviser 中
12.执行StartSpecificAcitvitylocked
13.执行realStartActivityLocked

在realStart ActivityLock中代码
app.thread.scheduleLaunchActivity 其中appthread类型为IapplicationThread
在这个接口函数中声明了大量的关于启动和停止的方法。
由此我们推测这个接口的实现者 完成了大量的工作。
推测这个实现者是AcitivityThread 中的内部类AppliactionThread
14.执行的scheduleLaunchActivity 即是ApplicationThread的schedulelaunchAcitivity方法
发送一个启动Activity 的handler消息给handler 处理 handler 的名称为 H
15.Handler 的处理方式由 ActivityThread的handlelaunchAcitivity方法实现
其中交给handleResumeActivity方法来调用被启动的Activity 的onResume这一个生命周期
16交给performLaunchActivity最终完成了Activity 的启动过程

17PerFormLaunchActivity 主要完成的几件事
1.从ActivityClientRecord中获取待启动的Activity 的信息
2.通过Instrumentation 的newActivity 方法 通过类加载器加载Activity 对象
3.通过LoadedApk 的makeApplication 方法创建Application 调用Application 的oncreate方法
4.创建 ContextImpl对象并通过attach方法来完成一些数据的初始化。
这里还会完成window 关联等。 并调用activity 的onCreate方法

ContextImpl 创建特殊的单例模式

ams功能分析之activity启动过程 以点击桌面图标启动为例; 前提知识: 桌面也是activity,即Launcher继承ActivityAPP进程Launcher源码摘取分析:public void onClick(View v) { ... Object tag = v.getTag(); if (tag instanceof ShortcutInfo) { //点击的 阅读详情

相关推荐

Android O Framework架构分析:以AMS视角看Activity启动过程

        在Android系统中,Activity的启动是一个非常频繁发生的过程,在Framework层中,这个过程牵涉到的模块也非常多。本文将基于Android 8.0源码,以ActivityManagerService模块(以下简称AMS)的视角来分析其过程中主要发生的行为。一. AMS中层次结构        AMS模块中涉及Activity的数据结构主要有三个:ActivityRec...

u012551754的专栏 2245

面试: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

cellranger安装以及使用

接受cellranger count的输出数据,将同一组的不同测序样本的表达矩阵整合在一起,比如tumor组原来有4个样本,PBMC组有两个样本,现在可以使用aggr生成最后的tumor和PBMC两个矩阵,并且进行标准化去掉测序深度的影响。但是由于病毒基因组太小了,且注释结果只有CDS没有exon,所以曲线救国,将CDS整体替换为exon,也不进行过滤了,直接下一步。虽然安装完毕,但是现在要运行cellranger的话需要在终端输入cellranger的整个路径。自动执行这个命令,需要将“

m0_59974475的博客 9393

android 开发之activity 启动流程《四》

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数..

qq_31469589的博客 766

【数字电源/MATLAB+PLECS】如何进行 Buck 数字电源仿真(二)PLECS 搭建开环 Buck 功率级

本文介绍了如何在PLECS中搭建开环Buck功率级模型,验证数字电源设计的基本思路。重点内容包括: 明确开发顺序:先开环验证功率级,再闭环设计控制器 搭建关键组件:输入电源、PWM模块、MOSFET开关、续流二极管、LC滤波电路及负载 设置初始参数:24V输入、12V输出、200kHz开关频率、22μH电感、100μF电容 测量关键波形:MOSFET Vds验证开关动作、电感电流纹波和输出电压稳态值 提供完整仿真模型和GitHub资源,便于读者复现验证 文章强调通过开环测试先确保功率级正确性,为后续闭环控制

weixin_43234123的博客 1218

X猫免费小说安卓逆向分析

七猫免费小说安卓逆向分析 难度(♥♥) 文章目录七猫免费小说安卓逆向分析 难度(♥♥)1. 查壳2. 抓包分析3. sign1. Frida-rpc2. Native函数分析快3点了. 睡觉~ 白天再继续写! 1. 查壳 我这边使用的是ApkTool, 拖进去显示未加壳。 2. 抓包分析 POST https://xiaoshuo.wtzw.com/api/v1/login/index HTTP/1.1 net-env: 1 channel: qm-cbcpa056_wm is-white: 0 platf

Qiled的博客 4366

慢~再听我讲一遍Activity的启动流程

前言 activity启动的流程分为两部分:一是在activity中通过startActivity(Intent intent)方法启动一个Activity;二是我们在桌面通过点击应用图标启动一个App然后显示Activity;第二种方式相较于第一种方式更加全面,所以本文会以第二种流程来分析。 简要 我们手机的桌面是一个叫做Launcher的Activity,它罗列了手机中的应用图标,图标中包含安装apk时解析的应用默认启动页等信息。在点击应用图标时,即将要启动的App和Launcher、AMS、Zy

Androidbye的博客 1528

VESC电调高级调参指南:电机校准与性能优化实战解析

本文详细解析了VESC电调的高级调参方法,包括电机校准与性能优化实战技巧。从基础参数设置到高级机械参数优化,再到动态性能调优,提供了全面的调参指南。特别针对电机类型、功率设置、电池参数配置等关键环节给出实用建议,帮助用户充分发挥VESC电调的性能潜力。

weixin_30772105的博客 196

Android8.0 Activity 启动流程

参考别人的分享,总结了一下代码的调用流程,做了一下笔记 startActivity() -> startActivityForResult() -> mInstrumentation.execStartActivity() -> ActivityManager.getService().startActivity(),会通过Binder机制,调用到ActivityManag...

huidev的博客 3304

【YOLOv8改进[Conv]】使用OREPA助力V8更优秀

使用OREPA助力V8更优秀,降低训练成本,在不引入任何推理时间成本的情况下提高深度模型的性能。

静谧、淡雅 1917

树莓派 RP2350B 开发环境搭建

本文介绍了树莓派RP2350B开发环境的搭建过程。

张一西的博客 286

Android的Activity启动流程分析

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

grandself的博客 4万+

【错误解决】本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止

转载请注明出处:http://blog.youkuaiyun.com/qq_26525215 本文源自【大学之旅_谙忆的博客】 在启动mysql服务时出现该错误: 本地计算机上的mysql服务启动停止后,某些服务在未由其他服务或程序使用时将自动停止。mysql 版本 5.7.14 系统 win 7后来经过一系列的百度,谷歌,总算是解决了。首先,你需要把原来的服务删除:mysqld --remove mysq

谙忆-陈浩翔 12万+

Android Activity启动过程分析

当我们在一个Activity中(或通过Context对象),调用startActivity()方法来启动另一个Activity的工程中发发生了什么呢?这就是本文想跟大家分享的内容,我们一起通过源码的方式来看下Activity的启动过程(本文是基于Android Q源码)。  启动Activity的流程大体分为两步:找到要启动的Activity;然后启动它。(虽说有点像如何把大象装进冰箱,但也确实是那么回事,只不过每个步骤有更多细节) 找到Activity  要想启动一个Activity,系统先要找到这个.

sd_zhuzhipeng的专栏 3509

WebRTC之beamforming算法

CSND已永久停更,最新版唯一来源点击下面链接跳转: 语音增强和语音识别网页书 坐标问题 这里以笔记本为例进行说明,当笔记本按如下方式打开: 首先是键盘和液晶屏呈90度,然后鼠标上方,也就是液晶屏上方正中间是camera,把平行于键盘的面看成是xy平面,把液晶屏所在的面看成是xz平面,所有平面的原点都在Camera的位置。 方位角:从原点开始,Camera的右侧是0度,逆时针方...

shichaog的专栏 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Android Activity 的详细启动过程分析

本文包含 App 的启动流程、新进程的启动流程分析,每一章节都配了一个比较完善的流程图来帮助读者理解。其实启动一个 App 和启动普通 Activity 一样,如果发现这个 Activity 的进程未启动的话,会启动对应的进程,然后由新的进程来启动这个 Activity,当然这可以单独写一篇文章来分析。但是本文为了降低耦合性让读者更加容易理解 Activity 的启动过程,直接从如何启动一个 Activity 开始讲起。

布莱克‌ 6693

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Activity组件启动过程分析

本文参考     1. Gityuan博文:startActivity启动过程分析     2. 老罗博文:Activity组件的启动过程 整理文档 网盘地址:https://pan.baidu.com/s/1hrEn2O8

wo_sxn的博客 884

VC中sqlite的使用

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

Android Activity的启动过程源码分析

Activtiy启动过程源码分析 Activtiy启动过程源码分析 在代码中我们启动一个Activity使用的方法是startActivity(Intent intent),这个方法起初是Context类的一个抽象方法,Activity间接继承了Context类,所以必须要重写这个抽象方法。我们直接从Activity的startActivity(Intent intent)方法看起...

小桥流水-XY 828

Android源码分析-Activity的启动过程

Android源码分析-Activity的启动过程

qq_43661383的博客 159

Activity启动过程详解(Android 12源码分析)

activity启动流程

yangfengxiao的专栏 6万+

Android应用程序内部启动Activity过程(startActivity)的源代码分析

上文介绍了Android应用程序的启动过程,即应用程序默认Activity的启动过程,一般来说,这种默认Activity是在新的进程和任务中启动的;本文将继续分析在应用程序内部启动非默认Activity的过程的源代码,这种非默认Activity一般是在原来的进程和任务中启动的。        这里,我们像上一篇文章Android应用程序启动过程源代码分析一样,采用再上一篇文章Android应用程序

老罗的Android之旅 15万+
上一篇: 线程池的封装和使用(代理模式工厂模式)
下一篇: Window 和windowManager源码分析
Nela
博客等级 码龄11年 9粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值