Android 四大组件启动

service:

startService启动过程分析 - Gityuan博客 | 袁辉辉的技术博客

在整个startService过程,从进程角度看服务启动过程

  • Process A进程:是指调用startService命令所在的进程,也就是启动服务的发起端进程,比如点击桌面App图标,此处Process A便是Launcher所在进程。
  • system_server进程:系统进程,是java framework框架的核心载体,里面运行了大量的系统服务,比如这里提供ApplicationThreadProxy(简称ATP),ActivityManagerService(简称AMS),这个两个服务都运行在system_server进程的不同线程中,由于ATP和AMS都是基于IBinder接口,都是binder线程,binder线程的创建与销毁都是由binder驱动来决定的,每个进程binder线程个数的上限为16。
  • Zygote进程:是由init进程孵化而来的,用于创建Java层进程的母体,所有的Java层进程都是由Zygote进程孵化而来;
  • Remote Service进程:远程服务所在进程,是由Zygote进程孵化而来的用于运行Remote服务的进程。主线程主要负责Activity/Service等组件的生命周期以及UI相关操作都运行在这个线程; 另外,每个App进程中至少会有两个binder线程 ApplicationThread(简称AT)和ActivityManagerProxy(简称AMP),当然还有其他线程,这里不是重点就不提了。

图中涉及3种IPC通信方式:BinderSocket以及Handler,在图中分别用3种不同的颜色来代表这3种通信方式。一般来说,同一进程内的线程间通信采用的是 Handler消息队列机制,不同进程间的通信采用的是binder机制,另外与Zygote进程通信采用的Socket

启动流程:

  1. Process A进程采用Binder IPC向system_server进程发起startService请求;
  2. system_server进程接收到请求后,向zygote进程发送创建进程的请求;
  3. zygote进程fork出新的子进程Remote Service进程;
  4. Remote Service进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
  5. system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向remote Service进程发送scheduleCreateService请求;
  6. Remote Service进程的binder线程在收到请求后,通过handler向主线程发送CREATE_SERVICE消息;
  7. 主线程在收到Message后,通过发射机制创建目标Service,并回调Service.onCreate()方法。

到此,服务便正式启动完成。当创建的是本地服务或者服务所属进程已创建时,则无需经过上述步骤2、3,直接创建服务即可。

startService的生命周期为onCreate, onStartCommand, onDestroy,流程如下图

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

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

相关文章

快速了解Maven

Maven是什么? Maven, a Yiddish word meaning accumulator of knowledge, began as an attempt to simplify the build processes in the Jakarta Turbine project. There were several projects, each with their own Ant build files, that were all slightly di…

LeetCode-62. 不同路径【数学 动态规划 组合数学】

LeetCode-62. 不同路径【数学 动态规划 组合数学】 题目描述:解题思路一:动态规划,动规五部曲解题思路二:动态规划(版本二)解题思路三:数论 题目描述: 一个机器人位于一个 m x n 网…

解决Windows报错:包无法进行更新、相关性或冲突验证。解决无法用Windows照片查看器打开照片问题。

目录 报错信息 解决方法 步骤一:查看照片打开的默认应用是否设置为Windows照片查看器。 步骤二:对注册表进行修改 方法一: 方法二: 报错信息 新电脑打开jpg或png文件会报以下错误 解决方法 步骤一:查看照片打开…

题目:输入3个数a,b,c,按大小顺序输出。

题目:输入3个数a,b,c,按大小顺序输出。    There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried abou…

ROS 2边学边练(21)-- 用rosdep管理依赖项

从此篇开始,我们即将告别入门阶段,走上进阶之路,还是要照常hold住信心啊!作为进阶篇的开始,我们今天轻松点,只动眼不动手,周末了稍稍躺平一下。 rosdep是啥 还记得之前在构建一个包之前都被建议…

Coding and Paper Letter(八十九)

CPL之第八十九期。 1 Coding: 1.openai通用代理转换是一个用于将其他厂商服务转为openai 标准接口相应的工具. 通过该工具, 可以将其他厂商的服务转为openai 标准接口. 讯飞星火,通义千问,gemini,openai,copilot,double,kimi,智谱清言 使用spring2webf…

电源监视继电器HRTH-J-2H2D AC220V 导轨安装 JOSEF约瑟

系列型号: HRTH-Y-2H2D-X-T跳位监视、合位监视、电源监控继电器; HRTH-Y-2Z-X-T跳位监视、合位监视、电源监控继电器; HRTH-Y-2H-X-T跳位监视、合位监视、电源监控继电器; HRTH-J-2H2D-X-T跳位监视、合位监视、电源监控继电器…

数学基础:矩阵

来自: https://www.shuxuele.com/algebra/matrix-determinant.html 一、矩阵的行列式 二、矩阵简单知识 三、矩阵乘法 四、单位矩阵 五、逆矩阵一:简单2阶矩阵求法 六、逆矩阵二:3、4阶逆矩阵求法 6.1 求余子式矩阵 6.2 求代数余子式矩阵 6.3 求伴随矩阵…

pyplot+pandas实现操作excel及画图

1、安装jupyter lab pip install jupyterlab # 启动 建议在指定的项目文件夹下 开启cmd窗口并执行 jupyter lab 启动后会自动打开浏览器访问 2、安装依赖 pip install matplotlib pip install xlrd pip install pandas 3、读取excel import pandas as pddf pd.read_excel(hi…

conda activate xxx-env出现错误CommandNotFoundError

1.问题描述&#xff1a; conda激活虚拟环境时&#xff0c;出现如下错误&#xff1a; conda activate baseCommandNotFoundError: Your shell has not been properly configured to use conda activate. To initialize your shell, run$ conda init <SHELL_NAME>Currentl…

harbor容器删除失败解决办法

docker中harbor容器删除失败 出现的问题以及解决方法 [rootk8s-master-node1 harbor]# docker-compose down [] Running 8/8⠿ Container nginx Removed 0.1s…

区块链游戏:探索未来的可能性与挑战

区块链游戏是一种将区块链技术应用于游戏领域的创新产品&#xff0c;它为游戏行业带来了全新的模式和可能性。本文将深入探讨区块链游戏的优点、挑战和未来趋势&#xff0c;帮助读者了解这一新兴领域。 一、区块链游戏的优点 1. 公平性&#xff1a;区块链技术保证了游戏中的物…

享元模式:优化资源利用的高效策略

在面向对象的软件开发中&#xff0c;享元模式是一种结构型设计模式&#xff0c;旨在减少内存使用&#xff0c;通过共享尽可能多的相似对象来提高应用程序的效率。本文将详细介绍享元模式的定义、实现、应用场景以及优缺点。 1. 享元模式的定义 享元模式&#xff08;Flyweigh…

Rust---方法(Method)

目录 与其他语言的不同函数和方法的不同简单示例self、&self 和 &mut self代码示例关联函数(Associated Functions)关联函数与方法的区别举例说明---关联函数的方法的使用举例说明---关联函数需要使用实例数据实现构造函数方法(为枚举实现方法)在Rust中,方法是与结…

什么是物理服务器?

物理服务器又叫做独立服务器&#xff0c;指物理上的单独服务器&#xff0c;是有着实体的服务器并不是虚拟的&#xff0c;物理服务器也可以理解成一台超大的电脑&#xff0c;但是对于普通的家用电脑来说&#xff0c;物理服务器需要长期处于开机的状态&#xff0c;对于硬件性能消…

Flume实时读取目录文件到HDFS案例

【尚硅谷】大数据技术之Flume教程从入门到实战_哔哩哔哩_bilibili 目录 flume简介 flume案例 1、监控端口数据官方案例 2、实时读取目录文件到HDFS案例 flume简介 Flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系…

服务限流--一起学习吧之架构

一、主要算法&#xff1a; 计数器算法&#xff1a;该算法定义了一个单位时间&#xff08;如1秒&#xff09;的阈值&#xff0c;每收到一次请求&#xff0c;计数就增加一次。如果请求总数超过当前单位时间内的阈值&#xff0c;就触发限流处理。这种算法简单直观&#xff0c;但存…

代码随想录算法训练营第39天| 62.不同路径、63. 不同路径 II

62.不同路径 力扣题目链接 代码 示例代码 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> result(m, vector<int>(n, 0));for (int i 0; i < n; i) {result[0][i] 1;}for (int i 0; i < m; i) {result[i][0] 1;…

多因子模型的数据处理

优质博文&#xff1a;IT-BLOG-CN 数据处理的基本目的是从多量的、可能是杂乱无章的、难以理解的数据中抽取并推导出有价值、有意义的数据。特别是金融数据&#xff0c;存在数据缺失&#xff0c;不完整以及极端异常值等问题&#xff0c;对于我们的分析和建模影响很多。 对于我…

五、书架开发--3.弹出框功能开发、离线缓存功能开发

实现弹出框真实业务逻辑 私密阅读tab业务逻辑 1、根据点击的tab不同&#xff0c;从而展示出不同的popup弹窗 每个tab中都有自己的index&#xff0c;点击的时候获取这个index&#xff0c;就可以知道当前点击的是哪个tab&#xff0c;然后用switch-case来根据不同的index展示不…