Android框架揭秘读书笔记

article/2025/11/10 12:10:38

Android启动过程

1.linux内核,加载linux内核

2 init 进程对各种设备进行初始化,

执行Daemon进程,管理USB、ADB链接管理器、Debugger系统、rild管理无线通信链接

Content Manager进程,提供运行Android各种系统服务信息

Media Server

Zygote进程用于缩短Android应用程序加载时间,每当Java应用程序时,Zygote就会派生出一个子进程来执行应用程序的虚拟机

System Server进程 Zygote进程创建,在Android启动过程中位于Zygote之后,运行的System Server提供给上层调用需要先将它注册到Content Manager中


Android与JNI

将Java层与C/C++有机的联系起来,使得他们互相协调,共同完成某个任务

java中调用C库

1,编写java代码

2,编译java代码 javac

3,生成C语言头文件

4,编写C代码

5,生成C共享库

6,运行java程序



java虚拟机使用函数原型将java代码和C代码映射到一起 javah


调用JNI代码。C调 java

1,创建java对象

2,访问静态成员域

3,调用类的静态方法

4,访问Jjava对象成员变量

5,访问Java对象的方法


Zygote

1,运行时会初始化虚拟机,并启动它

AppRuntime继承自AndroidRuntime用于初始化并运行虚拟机


registerZygoteSocket() 用于处理请求创建应用时fork进程

加载Framework中的类和平台资源preloadClasses()和preloadResources()

运行SystemServer


runSelectLoopMode() 进入循环,处理来自所绑定的套接字的请求



Android服务概要

服务有Android系统服务,应用服务两种

系统服务由Framework提供

应用服务由开发者继承并实现Service类后开发出来的


应用服务分为:本地服务,远程服务,区分方式是是否运行在同一个进程中


系统服务分为:本地系统服务,Java系统服务

本地系统服务(Audio Flinger 混合多种音频数据,并发送到耳机,扬声器,Surface Flinger 组合各种应用程序的Surface渲染到Frame Buffer),

Java系统服务分为:核心平台服务,硬件服务

核心平台服务

Activity Manager Service:管理所有的Activity的生命周期与堆栈

Window Manager Service, 位于Surface Flinger之上,将要绘制的机器画面上的内容传递给Surface Flinger

Package Manager Service 加载apk文件的信息,提供信息显示系统中设置的哪些包

硬件服务(用于控制底层硬件)

Alarm Manager Service 定时器

Connectivity Service 提供有关网络当前状态的信息

Location Service 提供终端当前位置的信息

Power Service 设备电源管理

Sensor Service 传感器感应值

Telephony Service 电话服务

Wifi Service 控制无线网状态

系统服务初始化代码

系统服务需要把相关信息注册到Context Manager中,以便Android应用程序在能够使用其提供的服务


主要术语定义




Android Binder IPC


Android Binder Driver

从进程的角度看服务使用

IPC过程分为服务注册,服务检索,服务使用

服务注册 Service Server 与 Context Manager间的IPC

服务检索 服务客户端与Context Manager间的IPC

服务使用 服务客户端与Service Server IPC 

从Binder的角度看服务的使用


Context Manager(服务注册,服务检索)

使用C语言编写,以便使其与Binder Driver紧密衔接


Android Service Framework


Native Service Manager


Service Server与Service Manager的关系


Java Service Framework

服务生成:Java服务方法有两种,1,继承Binder,aidl语言。2,继承Service开发

第一种,Java系统服务将服务注册到Context Manager中,然后通过Service Manager使用服务

第二种,Java应用程序服务由Activity Manager Service进行管理




Java Service Manager



Java系统服务运行分析

Activity Manager Service 创建Activity 服务 广播等,并管理他们的生命周期

Zygote创建进程后会把ActivityThread加载到新进程中 会创建Application和ActivityThread和loop


ActivityThread调用attachApplication()与ActivityManagerService建立连接  应用请求服务

ActivityThread通过attach建立ActivityManagerService连接  服务请求应用



http://chatgpt.dhexx.cn/article/E5giWdyH.shtml

相关文章

android框架揭秘!连续四年百度Android岗必问面试题!实战篇

前言 今天想停下代码,写点脑袋里不断浮现出来的一些看法。 也就是最近在微博和知乎上老看到“互联网寒冬”的说法。要么是看到啥公司薪水无法如期发放了,要么是看到别人说什么“裁员了,没有交接,签字然后电脑还了就走人&#xf…

字节大佬封神之作《Android Framework高级开发笔记》,完整版开放下载

在现阶段的Android开发工作中,无论是底层,还是应用层,Framework都至关重要。Framework的火热程度,相信我也不必再赘述。 为帮助大家深度学习Framework背景及它的巨大作用,这里分享一份《Android Framework高级开发笔记…

ANDROID框架揭秘

本书通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及 主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲 解了理解框架工作原理所需的各种基础知识和构成实际Android平台骨干的服务框架。 其中的主要内容包括…

用Java写linux命令行cd,java执行linux命令cd

java执行linux命令cd [2021-01-31 01:51:23] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#xff1…

Linux 常用命令与教程

http://c.biancheng.net/view/705.html C语言编程网的教程很好 还有菜鸟教程的 还有这个 https://mp.weixin.qq.com/s/7bSwKiPmtJbs7FtRWZZqpA 讲的也不错 https://baike.baidu.com/item/PS/8850709 百度百科 搜索一个linux命令 会出来这个 〇、序言:命令基本格式…

最强的linux命令总结.pdf

白月光-焰灵姬 来源:掘金- Lion https://juejin.cn/post/6938385978004340744 | 编辑:五角钱的程序员 前言 Linux 的学习对于一个程序员的重要性是不言而喻的。前端开发相比后端开发,接触 Linux机会相对较少,因此往往容易忽视它。…

linux命令 视频教程,常用的linux命令视频教程

常用的linux命令视频教程 [2021-02-19 11:27:41] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#…

ps 命令详解

From:http://blog.chinaunix.net/uid-25681671-id-3201927.html 进程和作业管理命令:http://man.linuxde.net/sub/进程和作业管理 Linux 关于 进程/线程 的命令 kill 和 pgrep 和 pidof 和 awk 和 pkill 和 killall:https://blog.csdn.net/fr…

Linux命令详解词典高频命令(三)

ln(link) 功能说明:链接文件或目录。 语法:$ ln [参数] [被链接文件] [链接目录] 包名称:coreutils 相关命令:cp,lndir,symlinks 补充说明:ln命令用在链接文件或目录,如同时指定两个以上的文件或目录&…

Linux命令详解词典高频命令(1)

参考机械工业出版社,施威铭研究室著的《Linux命令详解词典》 列出了其中的一些高频命令供自己学习 alias 功能说明:设置命令的别名。 语 法:-$ alias [别名][命令] 包 名 称:bash 相关命令:unalias 命令说明&#xf…

linux命令 语法 pdf,Linux命令详解词典pdf

摘要 精选381个命令,详细列出1729个范例,提供3种查询索引,适合各种Linux发行版。 Linux命令详解词典 内容简介 本书精选了381个Linux命令,详细罗列1729个范例,并提供3种查询索引方式。本书详细列出Linux命令的参数、功…

linux命令详解词典pdf,[计算机]linux命令详解词典

[计算机]linux命令详解词典 (42页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 22.9 积分 linux命令详解词典cat cdchmod chowncp cut名称:cat使用权限:所有使用者使用方式…

【基础篇】linux常用命令大全及命令说明

对于刚接触linux来说,命令是必不可少的。在linux中很多东西都是要用命令来控制,接下来就将我所了解到的常用命令列举一下,供大家参考: 一、基础命令 su root : 进入管理员用户 cd :切换到当前用户的主目录 cd 目录…

Linux命令详解词典高频命令(2)

grep 功能说明:查找文件里符合条件的字符串 语 法:# grep [参数] [查找范例] *[文件类型] 包 命 令:grep 相关命令:egrep,fgrep,rgrep 补充说明:命令用于査找内容包含指定范本样式的文件,如果发现某文件的…

100个linux常用命令,肝货,很实用

Linux命令是对Linux系统进行管理的命令。 对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。 线上查询及帮助命令(2个) man:查看命令帮助&#xff…

windows下强制删除文件

windows下强制删除文件 新建记事本在记事本中添加代码重命名为del.bat删除文件 新建记事本 在记事本中添加代码 DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1重命名为del.bat 删除文件

计算机中文件无法删除,电脑文件无法删除怎么办?强制删除文件的方法

在使用电脑时经常会遇到一些文件无法删除的情况,这是因为这些文件正在被软件调用,正常情况下只要把软件先关闭就可以删除文件了,但是如果是运行在后台的流氓软件就没这么简单了,下面就教大家如何强制删除这些文件。 1、如果你的电…

服务器上怎么强制删除文件夹,Windows10系统强制删除文件的方法

一般操作Windows系统在使用电脑时,如果有不用的文件,都会选择删除,但最近却有Windows10系统用户发现,在使用电脑时有些文件点击删除不能完全删除,对于这个问题该怎么办呢?可以强制删除吗?对于这个问题该如何解决呢?…

Mysql数据库的强制删除

Mysql数据库的强制删除 1.数据库的正常删除2.数据库的强制删除 1.数据库的正常删除 打开你的Mysql软件,打开连接,右击你想要删除的数据库,选择删除数据库。 2.数据库的强制删除 ①在此电脑或者资源管理器中打开C盘,在左上角的…

【转载】Win10强制删除文件夹

目前比较主流的Windows系统中,我们常常会遇到要对文件以及文件夹进行整理的时候,偶尔会遇到这种奇葩的问题:删除一个文件夹的时候吧,这个文件提示需要提供管理权限,问你是否继续。当点击了那个带盾牌的(就是…