Android启动以及 app 启动流程 笔记

news2024/9/24 23:27:38

 

Android 启动流程
init 进程是  用户控件鼻祖
zygote 进程是 java进程鼻祖
zygote进程的操作
   1.native 层 做的操作
         1.初始化java运行环境 虚拟机 (内存管理)
         2.注册jni
         3.运行 zygoteinit.main方法  进入java
   2.java 层做的操作
         1.预加载 文件
         2.创建sockt  (systemServer和zygote进程通讯)
         3.zygote fork出 systemServer进程
         4.循环等待 AMS发过来消息  fork进程
 systemServer进程
  1. createSystemContext              创建系统上下文 以及 ActivityThread 上下文
  2.创建 SystemServiceManager   管理 服务的生命周期   有个startServicer方法   返回一个服务
  3.startBootstrapService  引导服务    11之前 创建 AMS  之后创建 ATMS
  4.startCoreservice     核心服务
  5.startOtherService   其他服务   PMS WMS 都在这里  启动lanucher进程 (也就是lanucherApp)
   


app 启动流程  (参考地址 https://zhuanlan.zhihu.com/p/465105920)
  1.创建进程  
    1.Android  lanucher app 衔接上面操作
       startOtherService  里面会向 systemService里面进行bindler通讯 ,systemservice判断 lanucher进程是否存在 第一次肯定
       是不存在的 ,systemServer进程通过socket与zygote进程通讯   zygote fork出 lanucher进程 并交给AMS 管理
    2.手机上面点击 icon 启动流程
       手机整体相当于个app  (lanucherapp)点击icon 启动app 相当于跳转一个app  ,lanucher进程收到startActivity方法  通过binder通讯到 systemserver进程中
       sysytemserver 进程会判断有没有当前activity的进程  有的话直接用  没有的话 通过socket通讯 通过zygote进程进行fork出 app进程
  2.创建 app 主线程    进程创建好之后会生成 ActivityThread 主线程  也就是我们常说的ui线程,执行main方法  并生成applicationThread Loop Handler 对象,并执行loop.loop方法
     这就是主线程不用 调用loop.loop的原因  在进程创建好了之后 就已经执行的了
  3.创建 application activity   ActivityThread 中的main方法会调用attach方法 进程间通讯 到sysytemServer进程中 让AMS 调用 attachAplication方法 在attachaplication方法中 AMS
     会调用 bingApplication  以及scheduleLanucherActivity 方法  通知app进程中 handler对象 创建application以及activity 并执行相对应生命周期
  4.ui布局以及绘制  创建activity的时候  会生成phoneWindow --》 decorview--》contentView    contentView 就是 activity中 setContentView的layout布局

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Serverless Devs 社区联合信通院邀请您参加 2022 中国 Serverless 用户调查

作者:云原生产业联盟 在创新发展需求的不断驱动下,用户关注点逐步上移,敏捷成为破局高频竞争的利器。以应用为中心、屏蔽底层复杂逻辑,灵活扩展,按需取用的服务器无感知(Serverless)技术符合云…

【GUI视频教程】GUI综合实战视频教程第3期:GUIX Studio一条龙设计主界面,底栏和窗口切换控制(2022-11-21)

视频教程汇总帖:【学以致用,授人以渔】2022视频教程汇总,DSP第10期,ThreadX第5期,BSP驱动第24期,USB实战第4期,GUI实战第3期(2022-11-21) - STM32F429 - 硬汉嵌入式论坛 …

Dubbo 服务注册与启动源码解析

Dubbo 版本&#xff1a;3.1.2 自定义标签解析 在 DubboNamespaceHandler 中会添加 DubboDeployApplicationListener&#xff0c;其继承了 ApplicationListener<ApplicationContextEvent> 关于ApplicationListener&#xff0c;可参考&#xff1a;Spring 事件基本使用 服…

YoloV5+TensorRT封装|C#调用dll实现V5+TRT目标检测

在目标检测得领域中&#xff0c;yolo系列无疑是最强得目标检测框架&#xff0c;而其中得yolov5更是扛把子得存在&#xff0c;虽然有着众多的yolo系列版本&#xff0c;但是在工业领域中yolov5还是用的最多&#xff0c;yolov5 yyds&#xff0c;&#xff0c;&#xff0c;先奉献上我…

上海亚商投顾:沪指高开低走 钠离子电池、储能概念崛起

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数今日高开低走&#xff0c;收盘均小幅下跌&#xff0c;以中字头为首的权重股走弱&#xff0c;上证50跌超0.…

SpringBoot中如果字段为空就不返回给前端

SpringBoot中如果字段为空就不返回给前端前言测试参数的执行结果JsonInclude.Include.ALWAYSJsonInclude.Include.NON_NULLJsonInclude.Include.NON_ABSENTJsonInclude.Include.NON_EMPTYJsonInclude.Include.NON_DEFAULTJsonInclude.Include.USE_DEFAULTSJsonInclude.Include.…

2.(vue3.x+vite)使用vue-router

前端技术社区总目录(订阅之前请先查看该博客) 前端技术社区:vue3.x+vite,node篇,前端小技术,前端资料篇等相关内容的介绍 1:安装vue-router npm i vue-router 2:创建router文件 在src的目录下创建router文件夹与index.js文件 index.js文件内容如下: import {cr…

C#学习以及感受

我本来是写Java的,但是这边的代码用的是.NetCore框架 就自学了 但是学下来,发现其实这两者并没有什么本质区别 Java导包用import而c#用using Java与c#都是写一个静态的main方法来启动,c#的Main必须大写 Java和c#的数据类型基本一样,c#中的string的s可以小写,c#的布尔类型是bool…

Landsat Collection 2 T1一级数据详细介绍(数据处理过程和几何精度)

几项数据处理、几何和辐射改进&#xff0c;以及新的数据分发过程&#xff0c;定义了 Collection 2 Level-1 数据。此页面提供了有关用户可以在 Landsat Collection 2 Level-1 数据中找到的更改的详细信息。请参阅本页下方列出的特定于仪器的数据格式控制手册&#xff0c;以更全…

Redis基础命令(List类型)双链表

目录 概述&#xff1a; 特征&#xff1a;&#xff08;与LinkedList类似&#xff09; List常见命令 1.Lpush key element.....&#xff1a;向列表左侧插入一个或多个元素 2.LPOP key &#xff1a;移除并返回列表左侧的第一个元素&#xff0c;没有则返回nil 3.RPUSH key ele…

【allegro 17.4软件操作保姆级教程四】布线前准备之叠层和阻抗设计

通常在设计中&#xff0c;如果我们有控制阻抗的要求&#xff0c;一般会在加工工艺文档里进行说明&#xff0c;板厂拿到文档和相关工程文件后&#xff0c;会进行工程评估确认&#xff0c;会根据板厂的实际情况进行叠层和线宽的调整&#xff0c;所以这里只是进行简单分析&#xf…

sqli-labs/Less-59

这一关又只有五次机会 而且仍然是以id作为注入点 我们尽量再前一轮完成注入类型的判断 在后一轮完成各种爆破操作 首先先判断注入类型是否属于数字型注入 输入id1 and 12 回显如下 没有回显 说明后续操作不能使用报错注入解决问题 并且肯定是属于数字型注入 倒是有无修饰符不懂…

【javaEE】网络原理(数据链路层+小结)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言一、数据链路层1. 以太网2. 认识MTU&#xff08;没时间可以跳过&#xff09;3. 认识ARP&#xff08;没时间就跳过&#xff09;二、 【网络原理小结】&#xff08;含面试题&#xff09;THINK前言 一个人最大的痛…

搭建vue3.2+vite+ts+pinia项目

用到的技术 vue3.2vitetspinia 搭建项目 前言 vue3vite 会比vue2webpack的速度快很多&#xff1b;Vite 是一个轻量级的、速度极快的构建工具&#xff1b; vite官网 创建项目 npm create vitelatest报错了&#xff1a; 初始化失败 npm ERR! Could not install from “File…

【C语言】单词拼写检查

《算法集训传送门》 &#x1f449;引言 铭记于心&#x1f389;✨&#x1f389;我唯一知道的&#xff0c;便是我一无所知&#x1f389;✨&#x1f389;&#x1f496; ❄️我们的算法之路❄️&#x1f496;众所周知&#xff0c;作为一名合格的程序员&#xff0c;算法 能力 是不可…

基于飞书通讯录同步构建本地LDAP服务,打通各应用系统间的组织架构和账号信息

目前飞书社交办公应用成为公司日常沟通办公的协作工具&#xff0c;以及作为各种流程的审批处理系统&#xff0c;HR 也会在飞书上去管理所有员工的状态及组织架构。 随着公司内新部署的业务系统越来越多&#xff0c;例如Jenkins、JIRA、Gitlab、Confluence、禅道等&#xff0c;有…

门店数字化转型| 美发店智慧管理系统

颜值经济时代及他经济崛起&#xff0c;人们更注重自身形象&#xff0c;且追求方便快捷体验好的服务&#xff0c;而且她们越来越理智&#xff0c;不再盲目跟风&#xff0c;关注自身感受&#xff0c;追求便利个性化服务。 美容美发市场规模大但整体线上化程度偏低&#xff0c;下沉…

计算机网络复习——第六章网络层

hhhhh 还是今天的我&#xff0c;今天把这两个肝了&#xff0c;准备27考试&#xff0c;耶耶耶&#xff01;&#xff01;&#xff01;小h加油&#xff01; 《计算机网络》&#xff08;谢希仁&#xff09;内容总结 (javaguide.cn) 重点知识&#xff1a; 域名系统&#xff08;DN…

gptp报文完成时间同步原理

gptp(generalized Precision Time Protocol&#xff0c;广义精确时间同步协议),能够完成微秒级的时间信息同步 gptp定义了两种类型的设备 每一种设备都有自己的本地时钟&#xff0c;设备中用来发布同步时间报文的网络端口被称为主端口&#xff0c;用来接收时间同步报文的被称…

【Flutter】mixin简单使用

序言 之前有个技改任务&#xff0c;把司机学堂代码由原生转到Flutter。过程中遇到一个问题&#xff0c;学堂资料有pdf、视频、和图片&#xff0c;三种学习都会有几个共同的方法&#xff0c;比如学习进度更新、弹窗提示、完成接口调用等。在iOS中是用协议方法来实现&#xff0c…