Android基本概念

Android发展历史

Android 是一个流行的移动操作系统,由 Google 开发并于 2008 年首次推出。
Android是基于Linux开发的移动设备操作系统。
在2005年被Google收购,2008年发布Android1.0,后续发布1.5/1.6 ------ 直到2021年发布Andriod12 。

Android分层设计

在这里插入图片描述

主要可以分为上述的六层:

内核层

Android以Linux系统为基础,借助Linux内核服务实现硬件设备驱动,进程管理,内存管理,网络协议栈,电源管理,无线通信,设备驱动,文件系统,Binder(IPC)驱动等核心功能。

HAL硬件管理层

因为很多硬件产商不希望公开其设备驱动的源代码,因此需要将应用框架层和内核的设备驱动隔离,让应用程序框架的开发不完全依赖于具体的驱动设备,减少对linux内核的依赖,因此设计了HAL硬件管理层,制定了一套应用层对硬件层读写和配置的统一接口,将硬件的驱动分为用户空间和内核空间。

Android运行时库层

包含JAVA核心库和ART 虚拟机。

原生C++库层

系统类库大部分是由C/C++编写的,提供的功能通过Android应用程序框架为开发者使用,例如:资源文件管理,基础算法库,第三方类库。

JAVA API框架层

应用框架层提供了一些类的类库框架,方便开发人员调用,通过组件重用能够快速开发出应用程序,主要包含以下组件:

管理器/组件功能
Content Provider(内容提供者)提供一个应用程序访问另一个应用程序数据的功能
View System(视图系统)提供各种视图控件
Activity Manager(活动管理器)管理各种应用程序生命周期
Location Manager(位置管理器)提供位置服务
Package Manager(包管理器)管理应用程序的安装卸载
Notification Manager(通知管理器)管理通知

APP层

提供一些核心应用程序包,例如电子邮件,短信,日历,地图,浏览器等。开发者可以利用JAVA语言设计和编写属于自己的应用程序。

Android启动流程

在这里插入图片描述
安卓启动流程主要涉及从开机到系统完全启动并准备好接收用户请求的一系列步骤。这个过程可以分为几个主要阶段,包括引导芯片代码的执行、Bootloader的启动、内核的初始化、以及Android系统的启动。

引导芯片代码的执行:当按下手机电源键时,引导芯片代码从预定义的地方开始执行,加载引导程序Bootloader到RAM。

Bootloader的启动:Bootloader在Android系统初始化前运行,主要负责设置网络、内存等,为内核运行做准备。

内核的初始化:内核启动与Linux相似,包括设置高速缓存、受保护的内存、调度和加载驱动程序。当内核完成系统设置后,它会在系统文件中寻找需要初始化的服务。

Android系统的启动:

启动Binder线程池和SystemServiceManager,并且启动各种系统服务。
启动zygote进程,这是为了启动systemServer进程。
启动ActivityManagerService(AMS),负责管理系统中所有的Activity,包括启动、暂停、停止等操作。
创建新的Task和ActivityRecord,用于跟踪和管理Activity的状态。
调度Activity启动,将启动请求添加到消息队列中等待调度。
启动应用进程,如果目标Activity所属的应用进程未运行,则通过Zygote进程创建一个新的应用进程。
创建Activity实例,包括创建Application对象和目标Activity的实例。
创建和显示Activity界面,使Activity变为可见状态。
这个过程由上而下,从底层硬件到上层应用,确保Android系统能够正常工作并响应用户的请求。

Binder通信机制

Binder机制是一种进程间通信机制,从Android应用层角度来说,Binder是客户端和服务端进行通信的媒介。

binder通信模型

在这里插入图片描述

客户端和服务端要进行binder通信,需要分为以下三个步骤:
1、注册服务
在这里插入图片描述
Server在自己的进程向binder驱动申请创建service的binder实体

binder驱动为这个service创建位于内核的binder实体节点和binder引用

server通过binder驱动将该service的名字和对应的binder引用打包发给serviceManager

ServiceManager收到数据包后,取出service的名字和引用,填入一张查找表

2、获取服务
在这里插入图片描述
Client利用handle值为0的引用找到serviceManager

向ServiceManager发送XXXService的访问申请

ServiceManager从请求包中获取XXXService的名字,在查找表中找到对应的binder引用

ServiceManager将XXXService的binder引用回复给Client

3、使用服务

在这里插入图片描述
发送方通过自己的binder实体进行发送操作,把数据通过接收方的binder引用给接收方

binder驱动会处理这个发送请求,利用内核空间的MMAP(内存映射)机制进行通信。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是大型语言模型 ?

引言 在本文[1]中,我们将从高层次概述大型语言模型 (LLM) 的具体含义。 背景 2023年11月,我偶然间听闻了OpenAI的开发者大会,这个大会展示了人工智能领域的革命性进展,让我深深着迷。怀着对这一领域的浓厚兴趣,我加入了…

【Python】解决Python报错:ZeroDivisionError: division by zero

​​​​ 文章目录 引言1. 错误详解2. 常见的出错场景2.1 直接除零2.2 变量导致的间接除零 3. 解决方案3.1 检查除数3.2 使用异常处理 4. 预防措施4.1 数据验证4.2 编写防御性代码 结语 引言 在Python中,尝试将一个数字除以零时,会抛出ZeroDivisionErr…

重邮计算机网络803-(1)概述

目录 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成(功能) 6.互联网功能 7.互联网的组成(物理) 8. 互联网的边缘部分 9.两种通信…

串口屏在焊接机上的应用

在现代工业自动化浪潮中,焊接技术作为制造业的脊梁,其精准与效率直接关系到产品的质量和生产线的流畅性。而在这场技术的革新中,串口屏以其独特的优势,正成为焊接机领域的璀璨明星。今天,就让我们一同探索串口屏如何助…

手猫助手Agent技术探索总结

随着LLM的发展,ChatGPT能力不断增强,AI不断有新的概念提出,一种衍生类型的应用AI Agent也借着这股春风开启了一波话题热度,各种初创公司,包括Open AI内部也都在密切关注着AI Agent领域的变化。阿里集团内的AI团队也有很…

了解JVM中的Server和Client参数

了解JVM中的Server和Client参数 Java虚拟机(Java Virtual Machine,JVM)作为Java程序运行的核心,提供了多种参数来优化和调整程序的性能和行为。其中,-server和-client是两个重要的参数,分别用于配置JVM在服…

SMS - 基于阿里云实现手机短信验证码登录(无需备案,非测试)

目录 SMS 环境调试 从阿里云云市场中购买第三方短信服务 调试短信验证码功能 实战开发 封装组件 对外接口 调用演示 SMS 环境调试 从阿里云云市场中购买第三方短信服务 a)进入阿里云首页,然后从云市场中找到 “短信” (一定要从 云…

BUG解决: Zotero 文献GBT7714无法正常调用

1. 下载csl文件 网上有推荐直接下载现成版本的,比如参考资料【1】的蓝奏云文件,但是还是无法实现功能(空文档中可以用了)。 2. Github版本 也有说网盘版本和那个 Juris-M 的 CSL bug 太多的。 总结 后面发现,只需…

【原创】springboot+mysql农业园区管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

Go语言学习记录

GO语法学习之路 学习时间段2024-06-02学习记录安装&环境配置Go安装包内容统一入门姿势:hello world实现 Go语法初学Go 运行时(runtime)Go解释器 2024-06-03学习记录交叉编译要去linux下执行要去Mac下执行要去win下执行 参数声明常量 2024…

大语言模型的sft

https://zhuanlan.zhihu.com/p/692892489https://zhuanlan.zhihu.com/p/6928924891.常见的sft的开发流程 a.根据业务场景调整提示词;越详细越好,不要让模型理解歧义,拆分。 b.尝试闭源和开源,以评估LLM能够解决这类场景问题。 c.准备数据,包括多个子任务。 d.训练上线…

Inpaint9.1软件下载附加详细安装教程

软件简介: Inpaint 是个人开发者Max开发的图片处理软件,可以高效去除水印,修复照片等。使用方法和操作都很简单,非常适合不会PS等软件的小白用户。 安 装 包 获 取 地 址: Iinpaint win版:​​https://souurl.cn/b…

Java Web学习笔记22——前端工程化

实际的前端开发: 前端工程化:是指在企业级的前端项目开发中,把前端开发所需的工具、技术、流程、经验等进行规范化、标准化。 环境准备: vue-cli: 介绍:vue-cli是Vue官方提供的一个脚手架,用于…

项目管理--领导者vs管理者

项目管理领导者和管理者,虽然这两个角色在项目管理中都非常重要,但它们之间还是存在一些区别。首先,让我们来了解一下这两个角色的定义和职责。项目管理领导者是指那些能够激励团队成员,带领他们朝着共同目标前进的人。他们具备良…

Vue基础知识:插槽——默认插槽,插槽的后备内容,具名插槽,作用域插槽的认识与使用。(slot,#default,row的认识)

1.插槽的基本认识: 作用:让组件内部的一些结构支持自定义 插槽的分类: 1.默认插槽(组件内只能定制一处结构) 2.具名插槽(组件内可以定制多次结构) 简单而言:就是你希望封装一个…

YOLOv10开源,高效轻量实时端到端目标检测新标准,速度提升46%

前言 实时目标检测在自动驾驶、机器人导航、物体追踪等领域应用广泛,近年来,YOLO 系列模型凭借其高效的性能和实时性,成为了该领域的主流方法。但传统的 YOLO 模型通常采用非极大值抑制 (NMS) 进行后处理,这会增加推理延迟&#…

品牌策划:不只是工作,是一场创意与学习的旅程

你是否认为只有那些经验丰富、手握无数成功案例的高手才能在品牌策划界崭露头角? 今天,我要悄悄告诉你一个行业内的秘密:在品牌策划的世界里,经验虽重要,但绝非唯一。 1️、无止境的学习欲望 品牌策划,这…

【栈】1106. 解析布尔表达式

本文涉及知识点 栈 LeetCode 1106. 解析布尔表达式 布尔表达式 是计算结果不是 true 就是 false 的表达式。有效的表达式需遵循以下约定: ‘t’,运算结果为 true ‘f’,运算结果为 false ‘!(subExpr)’,运算过程为对内部表达式…

电调, GPS与飞塔

电调油门行程校准: 断电-----油门推到最高-------电调上电-------滴滴------油门推到最低---滴滴滴---校准完成。 http://【【教程】油门行程校准(航模,电机,电调)】https://www.bilibili.com/video/BV1yJ411J7aX?v…