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

android系统启动流程之SystemServer运行过程

SystemServer进程的启动流程:直接看代码:
SystemServer是Java中的一个进程,执行入口是SystemServer.java.main();

SystemServer.java.main();-->new SystemServer().run();-->createSystemContext();//创建系统上下文:虽然SystemServer没有界面,他也有这些操作-->ActivityThread acivityThread = ActivityThread.systemMain();-->ActivityThread thread = new ActivityThread();thread.attach(true, 0);-->mInstrumentation = new Instrumentation();ContextImpl context = ContextImpl.createAppContext();//makeApplication会加载各种资源:  apk(用assetManager加载Res,在下面这个地方做)mInitialApplication = context.mPackageInfo.makeApplication(true, null);-->context.setResources(packageInfo.getResources());mInitialApplication.onCreate();return thread;mSystemContext = activityThread.getSystemContext();mSystemContext.setTheme(DEFAULT_SYSTEM_THEME);//ui的系统上下文也创建 好了context  systemUiContext = activityThread.getSystemUiContext();//构建system manager service: 利用它去管理各种System Service, 后面才能去启动各种Services.-->mSystemServiceManager = new SystemServiceManager(mSystemContext);    -->run函数是重点,非常重要的点在于三个函数,以下三个函数的启动包含了90多个服务:startBootstrapServices(t);startCoreServices(t);startOtherServices(t);//死循环,有loop意味着它有handlerLooper.loop();

上面代码注释中说道,SystemServiceManager这个对象是SystemServer进程中重要的数据结构,用于管理系统各种SystemService,
那么它具体是怎么做到的?在具体分析之前,先理清楚 以下几个概念:

  •  什么是SystemService:

系统各类服务需要封装的类,每一种系统服务都要直接或间接的继续这个SystemService类,成为一个SystemService的类对象,方便让SystemServiceManager统一管理。

  •  什么是SystemServiceManager:

是SystemServer中的一个非常重要的类,得力助手,SystemServer通过它管理各种Services,如AMS, WMS, PKMS等,并且这些服务必须封装成一个对象,这个类就是SystemService,也就是说SysermServiceManager管理的都是SystemService的类对象。这种模式有点类似Activity:通过FragmentManager去管理许多的Fragment类对象。

  •  什么是SystemServer:

它是进程,是系统服务端,管理 各种Services.

  •  什么是ServiceManager:

它也是一个进程,早上Zygote进程启动,它是由init进程通过解析init.rc后创建。

上面的这几个问题可以用下图来概括:

搞懂了以上的知识点之后,以ATMS为例分析,SystemSericeManager是如何管理这个ATMS的,ATMS是在以下接口中被启动的。

startBootstrapServices(t);//启动ATMS-->ActivityTaskManagerService atm = mSystemServiceManager.startService(ActivityTaskManagerService.LifeCycle.class).getService());-->ActivityTaskManagerService(Class<T> serviceClass): //拿到类可以通过类去反射,得到Methods.-->final T service;service = construct.newIntance(mContext); //创建一个实例:即LifeCycle类的实例,在其构造函数中会实例化一个ATMSstartService(service); //启动服务-->class<SystemService> serviceClass =  loadClassFromLoader(classname, this.getClass().getClassLoader());return startService(serviceClass);-->mServices.add(service); //mServices就是ArrayList<SystemService>数组,将ATMS这个SystemService对象添加到数组中。service.onStart(); //本质就是调用了LifeCycle内部的ATMS服务实例的start()接口,下面有分析。

可以看看ActivityTaskManagerService它的父类是什么:
 class ActivityTaskManagerService extends IActivityTaskManager.Stub{}; 

疑问一,根据前面的分析,说系统各种服务都是继承SystemService类,为什以它这里不是继承至SystemService类呢?因为JAVA只能有一个父类,ATMS是一个服务,根据Binder的使用,各种ATMS需要继承一个Binder类(Stub类),但是为了让ATMS能满足上面的规则(需要继承至SystemService类),此时ActivityTaskManagerService内部定义了一个静态static的内部类LifeCycle,它继承至SystemService. 然后让ActivityTaskManagerService类对象成为LifeCycle的类成员, 这就解决是java语言中,如何让一个类可以继承两个父类的问题,后面对服务ATMS的操作转为LifeCycle中的操作。如下图代码所示:

    class ActivityTaskManagerService extends IActivityTaskManager.Stub{public static final class LifeCycle extends SystemService{private final ActivityTaskManagerService mService;public LifeCycle(){ //实 例化。mService = new ActivityTaskManagerService();}public void onStart(){ //对LifeCycle的所有操作都是对mService(即ATMS的操作)mService.start();}}}

以上是以ATMS为例进行分析说明,系统的90+种系统服务均是走类似的业务逻辑流程,可以按相同的方法进行分析,以下图这张图做最后一个总结。至此,安卓系统的整体分析流程结束。

相关文章:

android系统启动流程之SystemServer运行过程

SystemServer进程的启动流程&#xff1a;直接看代码&#xff1a; SystemServer是Java中的一个进程&#xff0c;执行入口是SystemServer.java.main(); SystemServer.java.main();-->new SystemServer().run();-->createSystemContext();//创建系统上下文:虽然SystemServe…...

Leetcode 1812。判断国际象棋棋盘中一个格子的颜色

国际棋盘问题&#xff1a; 给你一个坐标 coordinates &#xff0c;它是一个字符串&#xff0c;表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。 如果所给格子的颜色是白色&#xff0c;请你返回 true&#xff0c;如果是黑色&#xff0c;请返回 false 。 给定坐标…...

9个python自动化脚本,PPT批量生成缩略图、添加图片、重命名

引言 最近一番在整理资料&#xff0c;之前买的PPT资源很大很多&#xff0c;但归类并不好&#xff0c;于是一番准备把这些PPT资源重新整理一下。统计了下&#xff0c;这些PPT资源大概有2000多个&#xff0c;一共30多G&#xff0c;一个一个手动整理这个投入产出比也太低了。 作为…...

计算机竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据…...

基于Java的旅游信息推荐系统设计与实现,springboot+vue,MySQL数据库,前后端分离,完美运行,有三万字论文。

基于Java的旅游信息推荐系统设计与实现&#xff0c;springbootvue&#xff0c;MySQL数据库&#xff0c;前后端分离&#xff0c;完美运行&#xff0c;有三万字论文。 前台主要功能&#xff1a;登录注册、旅游新闻、景区信息、美食信息、旅游线路、现在留言、收藏、预定旅游线路…...

合宙Air724UG LuatOS-Air LVGL API控件--曲线 (Arc)

曲线 (Arc) 曲线控件&#xff0c;也可以称为弧。因为 Arc 本身就是弧&#xff0c;弧形的意思。根据控件的样子也能推测出它的使用场景&#xff0c;一般用在加载器(就是等待界面转的圈圈)或者数值显示&#xff0c;数值调节这些场景。曲线控件分了两个部分&#xff0c;前景和背…...

09-微信小程序 网络请求API(实现轮播广告和简易的聊天窗口)

09-微信小程序API网络请求(实现轮播广告和简易的聊天窗口) 文章目录 微信小程序API服务器域名配置注意网络相关APIrequestRequestTask 请求任务对象object.success 回调函数object.fail 回调函数案例代码&#xff08;实现轮播图&#xff09; WebSocket案例代码&#xff08;实现…...

Visual Studio 2017安装和项目配置

目录 前言1. What、Why and How1.1 What1.2 Why1.3 How 2. 安装3. 创建新项目4. 配置OpenCV库4.1 下载opencv安装包4.2 配置系统环境变量4.3 VS项目环境配置4.4 总结 5. 已有项目添加6. Tips6.1 常用快捷键6.2 字体和颜色选择6.3 配置编译路径 结语下载链接参考 前言 最近因为项…...

【提升接口响应能力的最佳实践】常规操作篇

文章目录 1. 并行处理简要说明CompletableFuture是银弹吗&#xff1f;测试案例测试结论半异步&#xff0c;半同步总结 2. 最小化事务范围简要说明编程式事务模板 3. 缓存简要说明 4. 合理使用线程池简要说明使用场景线程池的创建参数的配置建议 线程池的监控线程池的资源隔离 5…...

Vue使用ffmpeg,报ReferenceError: SharedArrayBuffer is not defined 如何解决

“SharedArrayBuffer is not defined” 错误是因为在浏览器环境中&#xff0c;SharedArrayBuffer 对象被认为是一种潜在的安全风险。为了防止 Spectre 攻击等漏洞&#xff0c;现代浏览器通常会禁用或限制对 SharedArrayBuffer 的使用。 SharedArrayBuffer 是一种 JavaScript 对…...

【OpenCV实战】1.OpenCV环境搭建,Mac M1系统,C++开发环境

OpenCV环境搭建&#xff0c;Mac系统&#xff0c;C开发环境 一、步骤VSCode C环境安装运行CMake安装运行OpenCV 安装CMakeList 一、步骤 VSCode C环境安装CMake 安装OpenCV 安装CmakeList.txt VSCode C环境安装运行 访问官网 CMake安装运行 CMake官网 参考文档 OpenCV 安…...

Hyperf 如何做到用两个端口 9501/9502 都能连接 Websocket 服务以及多 Worker 协作实现聊天室功能

为何 Hyperf 能够在两个端口上监听 WebSocket 连接&#xff1f; 源码角度来看&#xff0c;在配置了多个 Servers 时&#xff0c;实际上&#xff0c;只启动了一个 Server 注&#xff1a;我之前接触的代码都是启动一个服务绑定一个端口&#xff0c;之前也看过 swoole 扩展的文档…...

网络映射会遇到哪些困难

网络映射通过将复杂的网络划分为更小、可管理的块&#xff0c;帮助 IT 管理员获得对其网络的更大控制和可见性&#xff0c;它有助于可视化不同的网络组件&#xff08;如服务器、交换机端口和路由器&#xff09;如何互连以执行其功能&#xff0c;通过表示网络设备的通信方式&…...

【jvm】类的主动使用和被动使用

目录 一、主动使用二、被动使用 一、主动使用 1.创建类的实例 2.访问某个类或接口的静态变量&#xff0c;或者对该静态变量赋值 3.调用类的静态方法 4.反射&#xff08;例如Class.forName(“com.learning.Test”)&#xff09; 5.初始化一个类的子类 6.java虚拟机启动时被标明为…...

如何选择合适的损失函数

目录 如何选择合适的损失函数 1、均方误差&#xff0c;二次损失&#xff0c;L2损失&#xff08;Mean Square Error, Quadratic Loss, L2 Loss&#xff09; 2、平均绝对误差&#xff0c;L1损失&#xff08;Mean Absolute Error, L1 Loss&#xff09; 3、MSE vs MAE &#xff…...

Java常见的排序算法

排序分为内部排序和外部排序&#xff08;外部存储&#xff09; 常见的七大排序&#xff0c;这些都是内部排序 。 1、插入排序&#xff1a;直接插入排序 1、插入排序&#xff1a;每次将一个待排序的记录&#xff0c;按其关键字的大小插入到前面已排序好的记录序列 中的适当位置…...

【C++】5、构建:CMake

文章目录 一、概述二、实战2.1 内部构建、外部构建2.2 CLion Cmake 一、概述 CMake 是跨平台构建工具&#xff0c;其通过 CMakeLists.txt 描述&#xff0c;并生成 native 编译配置文件&#xff1a; 在 Linux/Unix 平台&#xff0c;生成 makefile在苹果平台&#xff0c;可以生…...

【ARP欺骗】嗅探流量、限速、断网操作

【ARP欺骗】 什么是ARP什么是ARP欺骗ARP欺骗实现ARP断网限制网速嗅探流量 什么是ARP ARP&#xff08;Address Resolution Protocol&#xff0c;地址解析协议&#xff09;是一个TCP/IP协议&#xff0c;用于根据IP地址获取物理地址。在计算机网络中&#xff0c;当一个主机需要发…...

初步认识OSPF的大致内容(第三课)

1 路由的分类 直连路由(Directly Connected Route)是指网络拓扑结构中相邻两个网络设备直接相连的路由,也称为直接路由。如果两个设备属于同一IP网络地址,那么它们就是直连设备。直连路由表是指由计算机系统生成的一种用于路由选择的表格,其中记录着直连路由的信息。直连…...

CSDN编程题-每日一练(2023-08-27)

CSDN编程题-每日一练&#xff08;2023-08-27&#xff09; 一、题目名称&#xff1a;异或和二、题目名称&#xff1a;生命进化书三、题目名称&#xff1a;熊孩子拜访 一、题目名称&#xff1a;异或和 时间限制&#xff1a;1000ms内存限制&#xff1a;256M 题目描述&#xff1a; …...

机器视觉之平面物体检测

平面物体检测是计算机视觉中的一个重要任务&#xff0c;它通常涉及检测和识别在图像或视频中出现的平面物体&#xff0c;如纸张、标志、屏幕、牌子等。下面是一个使用C和OpenCV进行平面物体检测的简单示例&#xff0c;使用了图像中的矩形轮廓检测方法&#xff1a; #include &l…...

C#开发WinForm之DataGridView开发

前言 DataGridView是开发Winform的一个列表展示&#xff0c;类似于表格。学会下面的基本特征用法&#xff0c;再辅以经验&#xff0c;基本功能开发没问题。 1.设置 DataGridView表格行首为序号索引, //设置 DataGridView表格行首为序号索引private void dataGridView1_RowPost…...

PDFPrinting.Net Crack

PDFPrinting.Net Crack 它能够轻松灵活地预测完美的打印结果以及用户文件的示例性显示。在.NET的PDF打印中&#xff0c;可以快速浏览最关键的元素。如果用户需要获得更详细的概述&#xff0c;那么他可以查看快速入门手册&#xff0c;甚至现有文档的详细概述参考。 在这种情况下…...

git操作:将一个仓库的分支提交到另外一个仓库分支

这个操作&#xff0c;一般是同步不同网站的同个仓库&#xff0c;比如说gitee 和github。某个网站更新了&#xff0c;你想同步他的分支过来。然后基于分支开发或者其它。 操作步骤 1.本地先clone 你自己的仓库。也就是要push 分支的仓库。比如A仓库&#xff0c;把B仓库分支&am…...

基于Java+SpringBoot+Vue前后端分离医院资源管理系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…...

Android——基本控件下(十七)

1. 文本切换&#xff1a;TextSwitcher 1.1 知识点 &#xff08;1&#xff09;理解TextSwitcher和ViewFactory的使用。 1.2 具体内容 范例&#xff1a;切换显示当前时间 <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools&…...

HCIP-HCS华为私有云

1、概述 HCS&#xff08;HuaweiCoudStack&#xff09;华为私有云&#xff1a;6.3 之前叫FusionSphere OpenStack&#xff0c;6.3.1 版本开始叫FusionCloud&#xff0c;6.5.1 版本开始叫HuaweiCloud Stack (HCS)华为私有云软件。 开源openstack&#xff0c;发放云主机的流程&am…...

docker下载github项目失败

Docker 在构建过程中直接从 GitHub 下载项目时超时&#xff0c;可能是由于网络问题、GitHub 访问限制或其他原因导致的。以下是一些建议和解决方法&#xff1a; 预先下载项目: 在构建 Docker 镜像之前&#xff0c;首先在宿主机上手动克隆 GitHub 项目&#xff0c;然后使用 COPY…...

【CSS】网站 网格商品展示 模块制作 ( 清除浮动需求 | 没有设置高度的盒子且内部设置了浮动 | 使用双伪元素清除浮动 )

一、清除浮动需求 ( 没有设置高度的盒子且内部设置了浮动 ) 绘制的如下模块 : 在上面的盒子中 , 没有设置高度 , 只设置了一个 1215px 的宽度 ; 在列表中每个列表项都设置了 浮动 ; /* 网格商品展示 */ .box-bd {/* 处理列表间隙导致意外换行问题一排有 5 个 228x270 的盒子…...

文本分类任务

文章目录 引言1. 文本分类-使用场景2. 自定义类别任务3. 贝叶斯算法3.1 预备知识3.2 贝叶斯公式3.3 贝叶斯公式的应用3.4 贝叶斯公式在NLP中的应用3.5 贝叶斯公式-文本分类3.6 代码实现3.7 贝叶斯算法的优缺点 4. 支持向量机4.1 支持向量机-核函数4.2 支持向量机-解决多分类4.3…...

市场营销公司/福州seo代理计费

1 复制概述 Mysql内建的复制功能是构建大型&#xff0c;高性能应用程序的基础。将Mysql的数据分布到多个系统上去&#xff0c;这种分布的机制&#xff0c;是通过将Mysql的某一台主机的数据复制到其它主机&#xff08;slaves&#xff09;上&#xff0c;并重新执行一遍来实现的。…...

对于网站反爬虫如何做/电脑优化系统的软件哪个好

有时候我们在使用pycharm进行python编程的时候&#xff0c;遇到了no python interpreter for the project&#xff0c;怎么解决呢&#xff0c;下面来分享一下方法 工具/原料 pycharm no python interpreter for the project解决方法 方法/步骤 1 第一步我们在使用pycharm进行py…...

wordpress区分移动站/企业网站注册

项目场景&#xff1a; element UI 利用指令loading制作局部loading。 问题描述&#xff1a; 需要制作局部loading的页面很长&#xff0c;loading 时可以向下滚动&#xff0c;导致遮罩层遮挡不了页面的下半部分。 解决方案&#xff1a; 在loading时利用overflow: hidden;禁止…...

制作企业网站软件/自媒体有哪些平台

文章目录labelme2voc其它数据集转换easydata2imageneteasydata2voceasydata2cocoeasydata2seglabelme2cocolabelme2segjingling2seglabelme2voc pdx.tools.labelme2voc(image_dir, json_dir, dataset_save_dir)将LabelMe标注的数据集转换为VOC数据集。 参数 image_dir (str)…...

广州条友网广告推荐/百度seo网络营销书

背景 在开发一个webapi项目&#xff0c;使用了Swagger首页展示Http接口。为了测试、提升接口性能&#xff0c;现在对接口加入分析工具。 MiniProfiler是一款很好的轻量级性能分析工具&#xff0c;提供库和UI。通过它可以查看程序的时间消耗&#xff0c;提供程序调试和性能优化…...

linux主机 安装wordpress/深圳网络营销策划公司

同步自&#xff1a;http://www.blogjava.net/AndersLin/archive/2006/06/27/55421.html 上次发了一文《软件企业的绩效管理和内部消耗》讨论很多&#xff0c;"置身珠海&#xff0c;学习与奋斗"cnBlogs让我认识其实我说了那么多都只是绩效的保健性&…...