Framework入门

news2024/11/29 14:56:07

一入门简介

Android系统建构分为四层由上到下依次是应用层,应用框架层,依赖库层,内核层,framework处于第二层,它为应用层的开发者提供基本功能,帮助开发快速构建应用程序。

FrameWork框架采用c/s架构,主要组成部分包括了服务端,客服端和驱动(SurfaceFlingger、Binder) 服务端其中ActivityManagerService(简写AMS),WindowMangerService(简写WMS),PackageManagerService(简写PMS)经常被提及,客服端经常重要的类包含了ActivityThread、Activity、PhoneWindow、Window、DecorView、ViewRoot、WindowManager等等…

FrameWork线程,系统只有相关操作的线程,其中一个线程就是UI主线程,启动应用入口时,就是让其处于UI线程上。

FrameWork启动,涉及到知识也十分庞大

对Android系统运行的机制,学习FrameWrok是必经之路,当前很多技术都是建立在对FrameWork层的了解,才开发出来的,例如热修复,插件化,等等…

二 Framework组成

服务端

AMS

Activity管理服务,主要是调度、启动、内存管理等。

WMS

窗口管理服务,主要是窗口、添加、启动、删除,以及分配窗口大小调节窗口叠放顺序,隐藏/显示等。

PMS

管理所有的package信息,包括安装、卸载、更新以及解析AndroidManifest.xml以组织相应的数据结构,这些数据结构将会被PMS、ActivityMangerService等等service和application使用到

提示 : 服务端还远不止这些,Android中差不多还有80几个服务。

客服端

Activity

应用程序执行的一个单位与用户直接接触的类,应用程序可包含多个,称为四大组件之一。

ActivityThread

应用程序main入口类,处于主线程上,有且只有一个该类。是跟服务端沟通的桥梁。

PhoneWindow

它继承Window类,所以提供了通用窗口操作接口,内部拥有DecorView对象处理着窗口上的界面例如状态栏、标题栏、内容页面。

ViewRootImpl

是view和WindowManger沟通的协议,让它们建立联系。

WindowManager

顾名思义窗口管理类,客户端申请创建窗口,交于WindowManager然后通过跨进程通信向AMS申请。

提示: 客服端还有许多的类,不单单只有上述这几个。

驱动

Binder

负责跨进程通信

SufaceFlingger(简称SF)

负责界面刷新的

三 线程

那么FrameWork是运行在哪些线程上的呢,Android系统处理UI的叫UI线程,处理耗时任务的叫子线程,那么还有处理任务也是有对应的线程,例如binder线程。

四 启动过程

android基于linux开发,所以在linux中它也就是一个应用程序,首先开启1号进程init,然后读取init.rc配置文件,配置文件中可知,启动zygote进程,然后zygote进程会再fork(孵化)SysteamServer进程启动第一个Dalvik虚拟机程序叫做Zygote(卵),其他的程序都是由Zygote孵化而来。

FrameWork启动的本质就是建立一套系统所需的环境,其中牵扯到zygote进程启动,serviceManager进程

surfaceFlinger进程,SysteamServer进程,以及ASM,PMS,WMS等服务启动。

眼见为实,利用几个命令,首先我们查看下是否如上所说。

查看所有进程命令

adb shell ps -A

打开开发者模式,打开USB联调,连上手机,打开CMD输入adb shell ps -A命令,我们顶部,进程id等于1,进程是init进程。

接着查看zygote进程,Ctrl+F查看,这里会搜索到多个zygote相关的进程,不过我们要定位到zygote64这个进程名称上,进程id=xxx,父进程id=1,那么得知zygote是由init进程启动而来。

继续查看systemServer进程,Ctrl+F查看,在这里你搜索的关键字应该是system_server,为什么是这个呢?还是反推得到的,我们知道systeamServer是由zygote进程启动的,那么之前查看到的zygote pid,所以就要找父进程是xxx的进程,所以查到只有system_server符合。

再接再厉,再看下systemServer进程开启的服务,我们知道服务其实就是systemServer下的线程,我们利用命令查看进程下服务即可,看是否存在AMS,PMS,WMS线程服务,当前要记住进程号是后面查看线程命令需要的。

查看进程下的线程

adb shell ps -T -p 进程号

输入adb shell ps -T -p xxx, 查看systemServer进程下的线程。

所以从上面来看,如果要做一些定制化的能力,我们是可以自己创建一个服务的,所以学习FrameWork是非常有必要的。

zygote的启动

用来孵化其他进程,为什么要用它来孵化,主要是因会预先装载共享类和共享资源,zygote孵化的进程可直接继承,这无疑加快其他进程启动速度。通过socket孵化的第一个进程叫做SysteamServiver

1 读取init.rc文件,启动zygote进程(开启电源、麦克风、网络等功能)

2 预加载类资源preload-classes

3 预加载资源preload-resources(drawable和color)

4 zygote通过sokect通信fork第一个进程SysteamServer服务

4.2 SysteamService的启动

启动系统服务线程,大概有80几个服务,常见的如AMS,WMS,PMS,它们都以线程的方式运行在SystreamService进程当中。

服务名称作用

PowerManagerService电源管理服务

ActivityManagerService最核心的服务之一,管 理 Activity

PackageManagerService程序包管理服务

AccountManagerService账户管理服务,是指联系人账户,而不是Linux系统的账户

BatteryService电池管理服务

WindowManagerServiceFramework最核心的服务之一,负责窗口管理

AlarmManagerService定时器管理服务,提供定时提醒服务

BluetoothService蓝牙服务

InputMethodManagerService输入法管理服务

简要启动流程图

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

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

相关文章

Java之反射爆破操作

一些方法 首先说一下-getField/Method什么的这种不带Declared只能获取到对应public的属性/方法 只有带Declared可以获取到非public的属性/方法 再看不带s和带s区别 不带s只获取对应的构造器/方法 比如说构造器 getDeclaredConstructor(int.class,String class) 就会获取不管什么…

【数据分析】【Pandas】(一)如何制作频率分布直方图

文章目录概述1. 直方图2. 密度图概述 计算一组数据的分布有助于我们更好的了解数据构成,我们可以通过直方图或密度图,将离散的数据通过连续的方式展现出来。 数据分布(频数分布):在各组按顺序排列的基础上&#xff0c…

小伍说,商业发展均是顺势而为,【字节跳动】之所以成功是因为顺应趋势,成功是必然结果!

昨天看完2021年 刘润【进化的力量】年终演讲,让我深刻感受到两点: 1、所有商业的变化,都是顺势而为! 2、所有理所当然的现在,都是曾经不可思议的未来,所有现在不可思议的未来,可能都是明天理所…

JavaSE笔记——函数式编程(高级集合类和收集器)

文章目录前言一、方法引用二、元素顺序三、使用收集器1.转换成其他集合2.转换成值3.数据分块4.数据分组5.字符串6.组合收集器总结前言 前面介绍了集合类的部分变化,事实上,Java 8 对集合类的改进不止这些。现在是时候介绍一些高级主题了,包括…

LInkedList的模拟实现

在之前的文章笔者介绍了链表的实现:无头单向非循环链表的实现!感兴趣的各位老铁可以点进来看看:https://blog.csdn.net/weixin_64308540/article/details/128397961?spm1001.2014.3001.5502对于此篇博客,在一写出来,便…

java学习day72(乐友商城)微信支付实现

今日目标: 会调用订单系统接口 实现订单结算功能 实现微信支付功能 1.订单系统接口 我们不做开发,只讲解 1.1.导入订单服务 把课前资料提供的leyou-order复制到D:\heima\code\leyou目录。 然后在工程内导入: 然后导入module&#xff1a…

java:责任链设计模式配合Spring@Order注解使用场景

java:责任链设计模式配合SpringOrder注解使用场景 1 前言 java的责任链模式,经典使用的场景为SpringMVC的doDispatch下,针对请求的过滤链式行为。实际开发场景中,可配合Spring的Order注解,定义1个有顺序的链式Compon…

我在深圳的三次工厂旅程 (一)

2019年末加入一家人工智能AI创业公司,由于公司涉及到智能硬件产品,所以有机会参与到硬件产品的整个研发测试端、产品迭代流、工厂生产序等方面的这些事情。相对于研发测试、产品迭代这些在过往的工作中经历中相对比较熟悉和接触频繁,在软件产…

鉴定完毕!来看看跨年晚会谁假唱了…欧莱雅智能画眉设备;首个AI律师下月出庭;推特又裁员;GitHub今日热榜 | ShowMeAI资讯日报

👀日报合辑 | 🎡AI应用与工具大全 | 🔔公众号资料下载 | 🍩韩信子 🎡 『谁在假唱』技术手段分析跨年演唱会上的歌手们 各大卫视的跨年演唱会,你追了几场?看出来了谁在对口型?B站Up主…

【北京理工大学-Python 数据分析-2.2Matplotlib绘制饼图、直方图、极坐标、散点图】

pyplot的基础图标函数 函数说明plt.plot(x,y,fmt,…)绘制一个坐标图plt.boxplot(data,notch,position)绘制一个箱型图plt.bar(left,height,width,bottom)绘制一个条形图plt.barh(width,bottom,left,height)绘制一个横向条形图plt.polar(theta,r)绘制极坐标图plt.psd(x,NFFT256…

Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则

Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则docker-compose volumes语法语法格式及其三种变体1.无来源 :匿名挂载主机系统上的目录路径2.非路径源:具名挂载(常用)主机系统上的目录…

mysql idb,frm文件复制恢复

idb是innodb数据文件frm是innodb表结构文件在数据库的data目录下可以看到 data下的目录名就是数据库名,打开该数据库文件夹对于一个表有2个文件,一个以idb结尾,一个以frm结尾直接复制粘贴是不识别的,提示找不到该表解决方法&#…

在线实习项目|Python爬虫助力疫情数据追踪在线实习项目

项目介绍 项目背景:2019-NCOV新型冠状病毒引发的肺炎牵动全国人民的心,本项目希望通过大数据技术为抗击新冠肺炎贡献一份力量。 项目目标:使用PYTHON爬虫技术爬取疫情数据,从不同维度分析数据,并用 MATPLOT…

ubuntu18.04部署DXSLAM,CNN+VSLAM,CPU实时运行

一、下载源代码 打开终端,输入命令克隆仓库 git clone https://github.com/raulmur/DXSLAM.git DXSLAM二、配置环境 We have tested the library in Ubuntu 16.04 and Ubuntu 18.04, but it should be easy to compile in other platforms. C11 or C0x CompilerPa…

虚拟化技术学习笔记8

添加网卡: 1、virt-manager: 选择虚拟机直接添加网卡操作。 2、virsh命令: virsh list virsh domiflist centos7-1 virsh attach-interface centos7-1 \ --type network \ --source default \ --model virtio \ --config 虚拟机查看网卡的添加情况&…

分享65个NET源码,总有一款适合您

NET源码 分享65个NET源码,总有一款适合您 65个NET源码链接:https://pan.baidu.com/s/19yFm_9K_L0xfykMP1hdP5A?pwdn2p7 提取码:n2p7 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...&#x…

Apache APISIX Ingress 1.6 正式发布!

距离上一个版本 v1.5 发布,已经过了 3 个月,我们很高兴地宣布 Apache APISIX Ingress v1.6 正式发布! 在该版本中,共有 29 位贡献者 参与代码提交,其中 17 位是新晋贡献者 ,感谢大家的支持和参与&#xff…

nacos的服务注册与调用

此篇博客进行一个简单实例进行展示服务注册和服务的调用,以订单与库存模块为例,其结构图如下: 目 录 1、创建订单模块与库存模块 1.1、编写stock模块 1.2、编写order模块 2、访问地址进行测试 3、总结 1、创建订单模块与库存模块 创建两…

论文投稿指南——中文核心期刊推荐(生物科学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

.net开发安卓入门-文件操作与配置操作

.net开发安卓入门-文件操作与配置操作文件操作内部存储代码运行效果System.Environment.SpecialFolder枚举类型对应路径表格外部存储(代码和效果见上图)区别缓存SharedPreferences获取SharedPreferences对象方法列表读取配置信息写配置信息AssetsNlog配置…