Android 深入系统完全讲解(4)

news2024/12/23 23:45:03

4 SystemServer 创建过程

SystemServer 进程非常关键了,我们上层的服务都是在这里以线程的形式存在,比如 AMS,PMS,WindowManagerService,壁纸服务,而关于调试这个服务进程,我们随后就会讲到。

在这里插入图片描述
我们检索下这个代码

在这里插入图片描述
找到实现的位置在这里。

在这里插入图片描述
创建完成,初始化完成,我们会进入到第二阶段,这个是在 ZygoteInit 的子进程中触发,具体代码是:
在这里插入图片描述
然后加载类,进入
在这里插入图片描述
这里重点是 RuntimeInit.applicationInit,参数是 com.android.server.SystemServer,于是进入了正式的 main 方法。

也 就 是 我 们 看 了 一 圈 , 主 要 是 设 置 , 创 建 的 过 程 , 下 来 就 是 它 的 正 式 流 程 了 。

/frameworks/base/services/java/com/android/server/ 下的 SystemServer.java

在这里插入图片描述
这里我们会加载 so 库,这里专门讲下,一个 so 库被加载的时候,会自动调用它的 onLoad方法
在这里插入图片描述
我们这里的 android_servers 编译的位置在

在这里插入图片描述
我们继续往下看,后面创建了 SystemServiceManager,后面的创建服务,以及一些系统回调,都是在这里响应的。

在这里插入图片描述
这里就遇见了关键的方法,执行启动各类服务,然后如果在这里启动失败的话,是可以看到有异常 Log,而且这里是可以设置断点的。因为虚拟机创建好后,调试就已经开始可用了。

于是服务启动的时候,可以在这里设置断点,分析启动代码。

也就是 PMS 的启动代码,是可以断点跟进学习的,这是我想说的信息。
startBootstrapServices 启动系统 Boot 级服务,我们的 PackageManagerService 在这里,AMS 也在这里。

在这里插入图片描述
startCoreServices 启动其他核心服务,比如 BatteryService。
startOtherServices 启动其他服务 比如 WindowManagerService,BluetoothService 和PinnerService,PinnerService 这个是 systemUI 会使用的一个服务。

每个服务会注册一个 SystemReady 的方法,在服务启动完成后触发后续的动作,而 AMS 完成的时候,会启动关键的一个界面,就是 SystemUI,这里方法是 startSystemUi(context, windowManagerF);

我们后面会讲到 SystemUI,虽然很特殊,但是依据规则,跟踪分析还是很好处理 systemUI的问题的。我们下来先分析下 AMS 的启动过程。

而 ActivityManagerServices 完成 SystemReady 这时候也会启动我们的桌面,调用的是startHomeActivityLocked,这样子我们就知道启动的时候都有的界面了。

锁屏,状态栏这些,是在 SystemUI 里面的,解锁后的桌面就是 startHomeActivityLocked 启动的。

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

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

相关文章

虚拟人-面部表情-Audio2Face语音驱动表情

任务: 输入自己的音频,导入maya模型,让maya模型通过音频驱动说话 教程: https://www.bilibili.com/video/BV1rZ4y1R7H4/?p2&spm_id_frompageDriver&vd_sourceef114f70c3fd4d5394f12dbd3d022bbe 一.下载和安装 1.首先…

Java面试常见问题-SE篇

JavaSE面试问题汇总①int和Integer的区别为什么设计封装类型?JDK、JRE、JVM的区别和equals方法的区别hashCode()与equals()之间的关系泛型中extends和super的区别String、StringBuffer、StringBuilder的区别重载和重写的区别接口和抽象类的区别List与Set的区别Array…

2023/1/8总结

今天学了了强连通算法 Tarjan算法 Tarjan算法是一种求解有向图强连通分量的线性时间的算法,他运用到了DFS算法以及DFS的特性和数据结构——栈。 算法介绍:如果两个顶点可以相互通达,则称两个顶点强连通(strongly connected)。如果有向图G…

LeetCode题解 二叉树(十三):701 二叉搜索树的插入操作;450 删除二叉搜索树中的结点

701 二叉搜索树的插入操作 medium 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。 如果要按照题目中所说改变二叉…

渗透测试中的常用编码

渗透测试中的常用编码 页面编码 在网页设置网页编码 在中加入设置特定html标签 这样页面的编码就会变成utf-8 ,如果没有设置编码就会使用默认 的编码,而浏览器默认编码与之不同就会出现乱码。 常用的有三种格式分别是 utf-8、gbk、gbk2312 ascii编码…

_Linux 进程信号-信号处理篇

文章目录前言捕捉信号1. 内核如何实现信号的捕捉2. sigaction代码验证可重入函数volatile(关键字)SIGCHLD信号实验一实验二前言 信号发送 信号处理 已经讲过,本章讲解信号处理最后一部分。 捕捉信号 信号捕捉过程图 经过信号捕捉过程图:我们知道信号…

语音文件分析

语音文件格式的重要参数 语音波形,它的这个文件,主要的格式就是采样率,那么电话或者嵌入式设备,采样率一般是8000Hz,就一秒钟8000个点,如果是PC机麦克风,那是16K,就一秒钟是16000个点,像这个CD是高保真的,音乐唱片的是用这个44.1K。 量化位数,又叫采样精度,…

绿通科技在创业板通过注册:收入依赖美国市场,张志江为实控人

2023年1月6日,证监会发布关于同意广东绿通新能源电动车科技股份有限公司(下称“绿通科技”或“绿通电动车”)、杭州国泰环保科技股份有限公司首次公开发行股票注册的批复。换句话说,证监会同意上述两家公司的创业板IPO注册。 同日…

【手写 Vue2.x 源码】第十一篇 - Vue 的数据渲染流程

一,前言 上篇,主要介绍了数组数据变化的观测情况,涉及以下几个点: 实现了数组数据变化被劫持后,已重写原型方法的具体逻辑;数组各种数据变化时的观测情况分析; 目前为止,数据劫持…

webpack 如何编写 loader

三种本地开发测试 loader 的方法 1. 匹配(test)单个 loader 你可以通过在 rule 对象使用 path.resolve 指定一个本地文件: webpack.config.js const path require(path);module.exports {//...module: {rules: [{test: /\.js$/,use: [{…

Ansible Automation Platform - 在 RHEL 安装 Ansible Automation Platform 2.3 环境

《OpenShift / RHEL / DevSecOps 汇总目录》 文本已在 RHEL 9 AAP 2.3 环境中进行验证。 说明: 本文介绍如何在一个节点上部署一套 all-in-one 的 Ansible Automation Platform 2.3 的运行环境。红帽 Ansible Automation Platform 2.3 需要至少 RHEL 8.4 以上的环…

【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + Velodyne VLP-16雷达 测试使用

简介:介绍 Velodyne VLP-16 16线激光雷达 在EHub_tx1_tx2_E100载板,TX1核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX1里已经安装了ROS版本:Melod…

HashMap、HashTable、ConcurrentHashMap之间的区别及常见面试题

Java集合类有的集合类是存在线程安全的问题,但是由于之前对于集合类的使用都是在单线程的情况下使用的,不没有在多线程环境下使用,所以不涉及线程安全的问题;这篇博客着重讲解一下多线程环境下使用哈希表。HashMapHashMap本身不是…

一些开发时常用的网站或命令

目录关于gitgit下载网址git安装教程Gortoisegit下载地址关于PythonAnyWhere关于Linux压缩与解压命令关于python的相对与绝对路径使用_\_file_\_实现跨平台关于宝塔面板关于浏览器驱动下载本博客首次编辑于2023.01.04 ,后续将持续进行更新 关于git git下载网址 gi…

Linux - 系统文件目录说明

目录/ - 根目录/bin - 用户基础二进制文件目录/boot - 静态启动文件/dev - 设备文件/etc - 配置文件/home - 主目录/lib - 基础共享库/lib64 - 64位基础共享库/lostfound - 可恢复的文件/media - 可移动媒体/mnt - 临时挂载点目录/opt - 自选软件包/proc - 内核 & 进程文件…

【Node】事件循环机制

Node 中的异步 API 定时器:setTimeout、setIntervalI/O 操作:文件读写、数据库操作、网络请求…Node 独有的 API:process.nextTick、setImmediate 事件循环的流程 Node 的事件循环分为 6 个阶段,这 6 个阶段会按顺序反复运行运行…

高并发内存池项目

文章目录一、项目介绍二、什么是内存池2.1 池化技术2.2 内存池2.3 内存池的作用2.4 malloc三、设计定长内存池四、高并发内存池整体框架设计六、threadcache6.1 threadcache整体设计6.2 threadcache哈希桶映射对齐规则6.3 编写对齐和映射的相关函数6.4 编写ThreadCache类6.5 th…

电网头条知识竞赛题库答案(自动答题)

今天教你们自动完成2023年电网头条的知识竞赛,小编也为大家安排好了教程,首先呢需要知道电网助手,打开电网助手网页https://wwwl.lanzouw.com/b01w803yj 为了帮到大家,我特地分享出来,希望能给大家带来一丝丝便利&…

1.3第二周 星期二Samba、FTP

目录 01 Samba文件共享服务 Samba服务基础 2.主配置文件 02 linux文件传输服务 1.用户访问的Samba 03 FTP服务概述 1.vsftp知识预备 04 操作流程: 1.使用时记得装ftp的包:yum install ftp -y 2.装完之后启动服务&am…

【北京理工大学-Python 数据分析-2.1Matplotlib库入门】

Matplotlib库的使用 Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发。matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式。 import matplotlib.pyplot as plt plt.plot([3,1,4,5,2]) plt.ylabel("Grade&qu…