当前位置: 首页 > news >正文

android framework之Applicataion启动流程分析(二)

上一篇讲了Zygote是如何收到启动Application的启动消息,并一步步进入Fork(),下面来分析zygote fork启动application后,application进程后续处理操作,是如何真正的启动的。

ZygoteInit.main():-->...caller = ZygoteServer.runSelectLoop();-->while(true) //死循环-->Zygoteconnection  connection = peers.get(); Runnable command = connection.processOneCommand();//进行进程的处理,创建新进程-->args = Zygote.readArgumentList(mSocketReader);//获取socket命令参数ZygoteArguments parsedArgs = new ZygoteArguments();...各种参数解析中...pid = zygote.forkAndSpecialize();//Fork子进程,得到一个新的pid.-->pid = nativeForkAndSpecialize(); //调用native层接口去forkif(pid == 0){ //子进程}return pid;if(pid == 0) //子进程:Application进程{//关闭Zygote服务Socket:因为fork时复制出来的socket,对Application进程来说,它没有用。zygoteServer.closeServerSocket(); //application进程可以正常运行了。return handleProcessChild();-->ZygoteConnection.java:ZygoteInit.zygoteInit(parseArgs.xxx); //app进程的启动-->ZygoteInit.java:RuntimeInit.commonInit(); //初始化运行环境ZygoteInit.nativeZygoteInit();//启动Binder, 并在androidRuntime.cpp中注册-->com_android_internal_os_ZygoetInit_ativeZygoteInit():-->gCurRuntime->onZygoteInit(); //通过JNI进入Native-->//进入app_main.cpp.onZygoteInit();//下面ProcessState对应Application这个进程实例,里面会初始化Binder-->sp<ProcessState> proc = ProcessState::self();-->在C++构造函数初始化列表中:mDriverFD(open_driver(driver))//这里总结下,Application被Zygote Fork出来之后,进入到Native层处理的目的是为了构建Binder.//因为后续的跨进程通信,都需要借助Binder.后续将此Binder发给AMS,AMS拿到App的IBinder,才能//够通过AMS的服务来与APP通信。proc->startThreadPool(); //启动Binder线程池//里面通过反射创建程序入口函数的Method对象,并返回Runnable对象return RuntimeInit.applicationInit();//类名字,类参数,加载器-->return findStaticMain(args.startClass, args.startArgs,classLoader);//通过反射拿到对应类的main方法的Method对象:找到的就是ActivityThread.java.main();-->m = cl.getMethod("main",new class[]{string[].class});return 近回一个Runnable 对象。}else{ //zygote 进程}...//Runnable对象返回到这里,对应上面代码中的Runnable command = connection.processOneCommand();后面//继续接着返回,最后返回到上面代码的caller = ZygoteServer.runSelectLoop();if(caller != null)caller.run(); //执行返回的Runnable对象,进入子进程。-->RuntimeInit.java.MethodAndArgsCaller->run();-->mMethod.invoke();//java反射原理。(执行的是ActivityThread.java的main())

分析时需要注意的是,底层调用linux fork()接口之后,会有两个返回值,如果pid =0,表示返回的是子进程,如果pid >0,返回的是父进程(即zygote的程序运行路线),父进程(zygote进程)可以得知子进程的pid号。

补充一个要点:ApplicationThread是什么?它其实是一个IApplicationThread.Stub对象,通过IBinder对象进行跨进程通信访问时,ApplicationThread本质就是Binder线程池中的一个线程(关联到上面代码中的proc->startThreadPool() )

相关文章:

android framework之Applicataion启动流程分析(二)

上一篇讲了Zygote是如何收到启动Application的启动消息,并一步步进入Fork()&#xff0c;下面来分析zygote fork启动application后&#xff0c;application进程后续处理操作&#xff0c;是如何真正的启动的。 ZygoteInit.main():-->...caller ZygoteServer.runSelectLoop()…...

django静态文件无法访问解决方案

nginx配置如下&#xff1a; # For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/user nginx; worker_processes auto; error_log /var/log/ng…...

WIndows 配置多版本python环境,非常清晰明了

配置多个python环境 下面以配置三个python版本环境为例子 首先下载好三个环境的python&#xff0c;如&#xff1a;python2.7、python3.6、python3.10 给个官网链接自己下&#xff0c;想要几版本就下几&#xff1a;https://www.python.org/downloads/windows/ 下载完成后将pyth…...

Leetcode每日一题:1267. 统计参与通信的服务器(2023.8.24 C++)

目录 1267. 统计参与通信的服务器 题目描述&#xff1a; 实现代码与解析&#xff1a; 写法一&#xff1a;两次遍历 hash 原理思路&#xff1a; 写法二&#xff1a;三次遍历 原理思路&#xff1a; 1267. 统计参与通信的服务器 题目描述&#xff1a; 这里有一幅服务器分…...

c++(8.28)菱形继承,虚继承,多态,抽象类,模板+Xmind

xmind: 作业&#xff1a; 1.编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴…...

安装部署JavaFX和IDEA添加JavaFX的详细步骤

安装部署JavaFX和IDEA添加JavaFX的详细步骤 一、认识JavaFX二、下载JavaFX三、解压到目录下四、IDEA导入JavaFX五、添加JavaFX的VM选项六、运行命令七、总结一、认识JavaFX JavaFX是Java平台的一个图形用户界面(GUI)工具包,用于创建丰富、交互式和可视化的应用程序。JavaFX提…...

MAC电脑外放没有声音解决方案

烦人呐&#xff0c;我的mac外接显示屏幕&#xff0c;显示器没有音频输出&#xff0c;需要mac笔记本的音频输出&#xff0c;但是经常打开后&#xff0c;mac没有声音输出&#xff0c;需要重启电脑才能生效。亲测一下方法有效&#xff0c;请参考&#xff1a; 文章目录 一、短期方案…...

Spring源码分析(八)CreateBean与DoCreateBean

写目录 一 CreateBean二 doCreateBean2.1 BeanWrapper2.2 缓存删除2.3 实例化Bean2.3.1 Supplier创建对象2.3.2 工厂创建对象2.3.3 构造器创建实例无参构造构造器依赖注入Setter的依赖注入autowireConstructor实例化instantiateBean 方法 2.4 Bean的前置处理 官网&#xff1a;H…...

iSCSI存储服务器

目录 一、ISCSI是什么&#xff1f; 二、ISCSI产生背景 三、存储分类 四、ISCSI架构 五、ISCSI存储服务搭建案例 一、ISCSI是什么&#xff1f; ISCSI名为互联网小型计算机系统接口又称为IP-SAN&#xff0c;是一种新的远程存储技术&#xff0c;提供存储服务的目标服务器默认使用的…...

信息技术02--初/高中--分类选择题(377道题与解析)

文章目录 第一章 办公软件 1-96第二章 信息技术基础 1-41第三章 计算机系统基础 1-28第四章 多媒体技术 1-115第五章 计算机网络技术 1-50第六章 信息安全 1-3第七章 算法与程序简介 1-13第八章 数据结构 1-2第九章 数据库技术 1-20第十章 练习 1-9 第一章 办公软件 1-96 1、某…...

java --- 枚举类

目录 一、枚举类 二、创建枚举类 2.1、JDK5.0之前创建 2.2、JDK5.0使用enum创建 三、枚举类常用方法 四、枚举类实现接口 一、枚举类 枚举类型本质上也是一种类&#xff0c;只不过是这个类的对象是有限的、固定的几个&#xff0c;不能让用户随意创建。 二、创建枚举类 …...

nvm和volta对node版本控制的区别

前言——我们做前端开发的都会需要node.js环境&#xff0c;我们直接安装指定的版本可以么&#xff1f;可以&#xff0c;只不过在需要换版本的时候还得卸载重新装。那有工具可以帮助我们不用卸载就更改node版本么&#xff1f;有啊&#xff0c;nvm就可以。那又有没有什么工具不用…...

高斯消元解线性方程组

思路&#xff1a; &#xff08;1&#xff09;模拟线性代数解方程组办法&#xff0c;在此讨论正方形方程组求解。 &#xff08;2&#xff09;考虑几个问题&#xff1a; 数据存储&#xff1a;采用double数组存储。判断是否为零&#xff0c;由于double计算存在误差&#xff0c;…...

【linux命令讲解大全】032.介绍 Linux 中的 rcp 命令:简化主机间文件复制操作

文章目录 rcp补充说明语法选项参数实例rcp命令使用条件 从零学 python rcp 使在两台Linux主机之间的文件复制操作更简单 补充说明 rcp命令使在两台Linux主机之间的文件复制操作更简单。通过适当的配置&#xff0c;在两台Linux主机之间复制文件而无需输入密码&#xff0c;就像…...

Mysql索引、事务与存储引擎 (事务、MySQL 存储引擎)

事务 一、事务的概念&#xff1a; ①事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#xff0c;要么都不执行。 ②事务是一个不可分割的工…...

Doris(六)--通过 Canal 同步数据到 Doris 中

pre 开启 mysql Binlog 网上有众多方法&#xff0c;自行百度。 查询是否成功&#xff0c;在 mysql 客户端输入 show BINARY LOGS; 出现如下提示&#xff0c;即表示 big log 正常开启。 1&#xff0c;下载 canal 服务端 传送门 注意&#xff1a;下载 canal.deployer-xxx …...

快手Java一面,全是基础

现在已经到了面试招聘比较火热的时候&#xff0c;准备面试的过程中&#xff0c;一定要多看面经&#xff0c;多自测&#xff01; 今天分享的是一位贵州大学的同学分享的快手一面面经。 快手一面主要会问一些基础问题&#xff0c;也就是比较简单且容易准备的常规八股&#xff0…...

未来芯片设计领域的药明康德——青芯如何在N个项目间游走平衡

总部位于上海张江的青芯半导体&#xff08;CyanSemi&#xff09;&#xff0c;ASIC定制设计是其核心业务之一。 青芯在单纯的设计服务维度之上&#xff0c;打造了从设计到生产的一套完整ASIC定制业务&#xff0c;不仅做芯片设计&#xff0c;还提供封装、测试服务&#xff0c;也…...

【跟小嘉学 Rust 编程】十九、高级特性

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

pandas由入门到精通-数据清洗-缺失值处理

pandas-02-数据清洗&预处理 A.缺失值处理1. Pandas缺失值判断2. 缺失值过滤2.1 Series.dropna()2.2 DataFrame.dropna()3. 缺失值填充3.1 值填充3.2 向前/向后填充文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清…...

大模型不再“一本正经地胡说八道”!揭秘RAG如何让AI「有据可查」

RAG&#xff08;Retrieval-Augmented Generation&#xff09;是一种结合信息检索与文本生成的AI架构&#xff0c;通过让大语言模型在回答问题前先查找外部知识库&#xff0c;有效缓解幻觉问题&#xff0c;并确保答案基于最新、专有数据。RAG通过文档切块、向量嵌入、向量检索和…...

5分钟学会AnyFlip电子书一键下载:免费PDF转换终极指南

5分钟学会AnyFlip电子书一键下载&#xff1a;免费PDF转换终极指南 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 你是否曾经在AnyFlip上找到一本精彩的电子书&#xff0c;想要永…...

保姆级教程:在Ubuntu上拆解和重组RK356x的update.img固件包

深度解析&#xff1a;Ubuntu环境下RK356x固件逆向工程与定制化实践 引言 在嵌入式开发领域&#xff0c;瑞芯微RK356x系列芯片因其出色的性能和丰富的接口资源&#xff0c;已成为智能硬件开发的热门选择。然而&#xff0c;官方提供的固件包往往无法完全满足特定项目的需求&#…...

ElevenLabs四川话API响应延迟突增故障复盘:一次DNS劫持引发的方言语音服务中断(附实时监控SLO看板模板)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs四川话语音服务中断事件全景速览 2024年10月12日凌晨&#xff0c;ElevenLabs面向中国西南地区用户提供的方言语音合成服务&#xff08;四川话模型 eleven_turbo_v2.5-sichuan&#xff09;突发…...

为持续运行的业务系统选择高可用大模型API服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为持续运行的业务系统选择高可用大模型API服务 在构建CRM、电商平台等需要永久在线、不容有失的业务系统时&#xff0c;集成大模型…...

反向传播:从轮廓到精雕细琢

反向传播&#xff1a;从轮廓到精雕细琢模型知道损失值之后&#xff0c;怎么调整自己的参数&#xff1f;上一篇文章我们讲了损失函数——它像一个指南针&#xff0c;告诉模型"你离正确答案还有多远"。 那知道偏了之后&#xff0c;模型该怎么调整自己的参数&#xff1f…...

别再复制粘贴了!手把手教你用Git命令将本地项目一键推送到GitLab仓库(含常见错误解决)

从零掌握Git命令流&#xff1a;本地项目高效同步GitLab全指南 在代码协作开发中&#xff0c;Git已成为不可或缺的版本控制工具。尽管现代IDE提供了便捷的图形化Git操作界面&#xff0c;但真正理解并熟练运用Git命令行&#xff0c;才是开发者摆脱"界面依赖症"、深入掌…...

MPV_lazy:Windows用户必备的终极视频播放体验提升指南

MPV_lazy&#xff1a;Windows用户必备的终极视频播放体验提升指南 【免费下载链接】mpv_PlayKit &#x1f504; mpv player 播放器折腾记录 Windows conf | 中文注释配置 汉化文档 快速帮助入门 | mpv-lazy 懒人包 Win11 x64 config | 着色器 shader 滤镜 filter 整合方案 项…...

英语发音宝库:11万+单词MP3音频一键获取指南

英语发音宝库&#xff1a;11万单词MP3音频一键获取指南 【免费下载链接】English-words-pronunciation-mp3-audio-download Download the pronunciation mp3 audio for 119,376 unique English words/terms 项目地址: https://gitcode.com/gh_mirrors/en/English-words-pronu…...

IP查询工具怎么选?在线API vs IP离线库:精度、速度、成本、隐私全对比

随着游戏安全、反作弊、精准营销、风控合规等业务场景的增长&#xff0c;IP查询逐渐从“简单的归属地展示”转向大规模实时决策、风险识别与行为画像构建的核心基础能力。选择在线API还是离线库&#xff0c;直接决定了你的系统在高并发下的稳定性、数据合规性以及长期运维成本。…...