Android基本概念

news2024/9/17 8:42:53

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(内存映射)机制进行通信。

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

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

相关文章

手摸手系列之 - 什么是接口的幂等性以及 AOP+Redis 基于注解实现接口幂等性校验

接口的幂等性是指在分布式系统中,一个操作或者请求无论执行多少次,其结果都是相同的。换句话说,即使多次执行同一个操作,它也不会产生副作用,或者不会改变系统的状态。幂等性是设计 RESTful API 时的一个重要原则。 幂…

RabbitMQ高频面试题整理

文章目录 1、RabbitMQ如何保证消息不丢失1)confirm 消息确认机制 (生产者)2)消息持久化机制 (RabbitMQ 服务)3)ACK 事务机制(消费者) 2、RabbitMQ 中有哪几种交换机类型?1) Direct Exchange2)Fanout Exchange3&#x…

meilisearch的分页

Elasticsearch 做为老牌搜索引擎,功能基本满足,但复杂,重量级,适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求,极快,单文件,超轻量。 所以,对于中小型项目来说…

细说MCU串口函数及使用printf函数实现串口发送数据的方法

目录 1、硬件及工程 2、串口相关的库函数 (1)串口中断服务函数: (2)串口接收回调函数: (3)串口接收中断配置函数: (4)非中断发送&#xff…

使用API有效率地管理Dynadot域名,列表形式查询已存在的文件夹信息

关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…

2024年学习AI绘画是还有来得及吗?事实上看这篇就足够了aigc绘画入门基础篇

想要学好stable diffusion,学习资料很重要,本文就将常用的模型下载、提示词工具、学习资料网站进行,以及AI可以做的那些副业,汇总,以提升各位彦祖、亦非们的学习体验~ 一、简介 今天给大家分享Stable Diffusion模型存…

力扣42 接雨水

听说字节每人都会接雨水,我也要会哈哈哈 数据结构:数组 算法:核心是计算这一列接到多少雨水,它取决于它左边的最大值和右边的最大值,如下图第三根柱子能接到的雨水应该是第一根柱子高度和第五根柱子高度的最小值减去第…

DNS响应时间分析

目录 什么是DNS响应时间? 为什么DNS响应时间很重要? AnaTraf流量分析仪DNS分析 在当今数字化时代,网络的稳定性和性能对企业的运营至关重要。作为IT运维人员,我们的职责是确保网络顺畅运行,而DNS(域名系…

我国喷砂机产量逐渐增长 金属加工为最大应用领域

我国喷砂机产量逐渐增长 金属加工为最大应用领域 喷砂是通过压缩空气作为动力形成高速喷射束,将粉状喷料高速喷射到需处理工件表面,使得工件外表面的外表发生变化,起到清理和粗化基体表面的作用。喷砂机是喷砂设备的核心组成部分,…

网站选择定制化的优缺点

网站定制化要明白的是,先有需求,然后在按照每一个需求去进行任务开发。 一.优点: 1.能够落实到每一个需求细节里面,可以很好的掌握需求的实现。 2.网站的所有使用权都在自己的手里,不需要第三方托管&#xff0…

Linux 防火墙 Firewall 和 Iptables 的使用

如果我们在Linux服务器的某个端口上运行了个服务,需要外网能访问到,就必须通过防火墙将服务运行端口给开启。Linux中有两种防火墙软件,CentOS7.0以上使用的是firewall,CentOS7.0以下使用的是iptables(使用较少且不建议…

代码签名证书一年的价格是多少?如何申请

代码签名证书的价格因品牌、类型及所提供的服务等因素而有所不同,价格通常在数千元至万余元人民币之间不等。 不同类型代码签名证书价格差异 个人代码签名证书:个人代码签名证书是最基础的类型,适用于个体开发者,其价格较为经济…

通信原理眼图硬件实验

一、实验目的 1. 了解眼图与系统抗噪性能、码间干扰之间的关系及实际意义; 2. 掌握眼图观测的方法并记录研究; 二、实验内容 1. 观测ASK调制系统眼图并记录分析; 2. 观测FSK调制系统眼图并记录分析; 三、实验器材 1. 双踪示…

训练大模型自动在RAG和记忆间选择

现如今,检索增强生成(Retrieval-augmented generation,RAG)管道已经能够使得大语言模型(Large Language Models,LLM)在其响应环节中,充分利用外部的信息源了。不过,由于RAG应用会针对发送给LLM的每个请求,都…

RabbitMQ-Stream(高级详解)

文章目录 什么是流何时使用 RabbitMQ Stream?在 RabbitMQ 中使用流的其他方式基本使用Offset参数chunk Stream 插件服务端消息偏移量追踪示例 示例应用程序RabbitMQ 流 Java API概述环境创建具有所有默认值的环境使用 URI 创建环境创建具有多个 URI 的环境 启用 TLS…

C# WinForm ——31 32 Menustrip菜单栏

1. 介绍 菜单控件,包含多个菜单项的菜单容器 主菜单下面可以有子菜单,子菜单下面可以有下一级子菜单 2. 常用属性 属性解释(Name)控件ID,在代码里引用的时候会用到Enabled控件是否启用Dock定义要绑定到容器的控件边框,默认是t…

最短路:Bellman-Ford

最短路&#xff1a;Bellman-Ford 题目描述参考代码 题目描述 输入样例 3 3 1 1 2 1 2 3 1 1 3 3输出样例 3参考代码 #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 510, M 10010;int n, m, k; int dist…

Master-Worker 架构的灰度发布难题

作者&#xff1a;石超 一、前言 Master-Worker 架构是成熟的分布式系统设计模式&#xff0c;具有集中控制、资源利用率高、容错简单等优点。我们数据中心内的几乎所有分布式系统都采用了这样的架构。 &#xfeff; 我们曾经发生过级联故障&#xff0c;造成了整个集群范围的服…

使用 C# 进行面向对象编程:第 9 部分

使用 OOP 的用户活动日志 应用程序背后的关键概念 在这一部分中&#xff0c;我们将使用之前学到的一些 OOP 概念。我们将创建一个小型应用程序。在继续之前&#xff0c;请阅读我的文章user-activity-log-using-C-Sharp-with-sql-server/。在本课程中&#xff0c;我们将再次使…

Python实现base64加密/解密

实现原理&#xff1a;导入base64库 一、加密 import base64# 加密 username "admin" base64_username base64.b64encode(username.encode(utf-8)).decode() print(base64_username) password "123" base64_password base64.b64encode(password.encod…