手机操作系统Android

▶1.Android系统概述

Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发,它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备,如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机,以后Android逐渐扩展到平板计算机、电视、数码相机、游戏机等领域。2016年全球智能手机总销量为14.7亿台,Android平台手机全球市场份额达到了73%

▶2.Android系统结构

Android系统采用分层结构,系统分为四层,分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。

1)应用程序层

应用程序层由运行在Android设备上的所有应用(App)共同构成,它不仅包括通话、短信、联系人等系统应用(随Android系统一起预装在移动设备中),还包括其他后续安装到设备中的第三方应用程序,如浏览器、微信、导航地图等。

Android应用程序都采用Java语言开发。但一些应用(如游戏)中,需要进行大规模运算和图形处理,以及使用开源C/C++类库。如果通过Java实现,可能会有执行效率过低和移植成本过高等问题。因此在Android开发中,开发者可以使用C/C++来实现底层模块,并通过JNI(Java Native Interface)接口与上层Java实现交互,然后利用Android提供的交叉编译工具生成类库并添加到应用程序中。但是,开发者只能使用C/C++编写功能类库,而不是整个应用程序。因为Android的界面显示、进程调度等核心机制都是通过Java来实现,应用程序只有按规定模式编写Java模块和配置信息,才能够被识别和执行。

2)应用程序框架层

Android应用程序框架包括:活动用于前台运行的进程(功能服务);服务指后台运行的进程,不提供用户界面;广播接收器用于接收广播信息;内容提供器支持在多个应用中存储和读取数据,相当于数据库。应用程序框架的功能是简化程序组件的调用,任何应用程序都可以调用这些功能模块,这种程序重用机制使用户可以方便地替换程序组件。
(1)活动管理器(Activity)。在Android中,活动通常是一个手机屏幕,它可以不显示一些控件(如按钮、对话框等),也可以监听和处理用户事件。一个Android应用由多个活动组成。多个活动之间可以相互跳转,例如,按下一个按钮后,可能会跳转到其他的活动。当打开一个新屏幕时,之前的屏幕会设置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开屏幕。
(2)服务管理器(Service)只能在后台运行,但是可以和其他组件进行交互。服务也是一种进程,它可以长时间运行,但是没有用户界面。例如,用户运行音乐播放器时,如果这时打开浏览器上网,虽然已经启动了浏览器程序,但是音乐播放并没有停止,而是在后台继续播放。这个播放进程由播放音乐的服务进行控制。
(3)广播接收器(Broadcast Receiver)是应用程序之间传输消息的机制。例如,当电话呼入这个外部事件到来时,可用广播进行处理;下载文件完成时,也可以利用广播进行处理。广播并不生成用户界面,它通过通知管理子系统告诉用户有些事情发生了。
(4)内容提供器(Content Provider)的作用是对外共享数据。在Android中,对数据的保护很严密,除了存放在SD卡中的数据,一个应用程序所具有的数据、文件等内容,都不允许其他应用程序直接访问。

3)系统运行库层

系统运行库是操作系统与应用程序沟通的桥梁,它分为两层;库函数层(Library)和Dalvik虚拟机。Android包含了一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。
(1)Surface用于显示子系统管理,为应用程序提供2D/3D图形显示到物理设备。

(2)Media是基础多媒体库,它支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG-4、H.264、MP3、JPG等。
(3)SQLite是轻量级嵌入式数据库,数据库又分为共用数据库和私用数据库。
(4)OpenGL/ES是3D图形的专业图形函数库。

(5)FreeType是字体引擎,它提供点阵字体和矢量字体的渲染。

(6)Webkit是Web浏览器引擎,支持Android浏览器和一个可嵌入的Web视图。

(7)SGL是底层2D图形函数库,它包含字形、坐标、点阵图等函数处理功能。

(8)SSL(安全套接层)提供安全通信和数据完整性检测。

(9)Libe是从BSD继承的标准C函数库,它是专门为嵌入式Linux设备定制的。

(10)Android运行时机制。和所有Java程序运行平台一样,为了实现Java程序在运行阶段的二次编译,Android为它们提供了运行时(Runtime)机制。Android运行时机制由Java核心类库和Java虚拟机(Dalvik)共同构成。Java核心类库涵盖了Android应用程序框架层和应用程序层所要用到的基础Java库,包括Java对象库、文件管理库、网络通信库等。

Dalvik是为Android量身打造的Java虚拟机,它负责执行应用程序,分配存储空间,管理进程生命周期等工作。Dalvik没有采用基于栈的虚拟机结构,而采用了基于寄存器的虚拟机结构。一般来说,基于栈的虚拟机对硬件依赖程度小,生成的代码更节约空间,可以适配更多的低端设备;而基于寄存器的虚拟机对硬件要求更高,编译出的代码可能会耗费稍多的存储空间,但它的执行效率更高,更能够发挥高端硬件(主要是CPU)的能力。
Dalvik没有沿用Java二进制字节码(JavaBytecode)作为编译的中间文件,而是采用了新的二进制码文件.dex。在Android应用程序编译过程中,编译程序会先生成若干个.class文件,然后统一转换成.dex文件。在转换过程中,Android会对部分.class文件中的指令做转义,使用Dalvik指令集(OpCodes)来替换原指令,以提高执行效率。同时,dex会整合多个.class文件中的重复信息,并对冗余部分做全局优化和调整,合并重复的常量定义,以节约常量存储空间。这使得.dex文件通常会比.class文件更精简。

4)Linux内核层

Android系统搭建在Linux内核之上,Android的Linux内核包括安全管理、存储器管理、程序管理、网络堆栈、驱动程序模型等。从运行角度看,它们只是运行在Linux系统上的一些进程,并不是一个完整的Linux系统。
硬件抽象层(HAL)不是一个独立层,它是Android为厂商定义的一套接口标准,Android并没有定义一个单独的硬件抽象层(HAL),Android的硬件抽象层是以封闭源码形式提供的硬件驱动模块。HAL的目的是将Android框架与Linux内核隔离开,使Android不至过度依赖Linux内核,以达成让Android框架的开发能在不考虑驱动程序的前提下进行。

▶3.Android应用程序安装包APK

Android应用程序通过Android SDK编译器,将程序编译后打包成一个apk文件。文件后缀名为apk的文件是安卓应用程序安装包,它采用zip格式,并非Java字节码文件。可以将apk文件下载到Android手机中,执行apk文件即可进行应用程序安装。
在Android文件系统中,有几个非常重要的文件夹,一是存放系统文件的/system文件夹;二是存放配置文件的/dev文件夹;三是SD卡中存放程序和数据的/sdcard文件夹。

▶4.Android资源消耗

Android系统看起来很耗内存,因为Android上的程序采用Java语言开发,而Android上的每个应用(App)都带有独立虚拟机,每打开一个应用就会运行一个独立的虚拟机。这样设计是为了避免虚拟机崩溃而导致整个系统崩溃,但代价是需要更多的内存(以空间换时间)。这些设计确保了Android的稳定性,正常情况下最多单个应用崩溃,但整个系统不会崩溃,也永远不会出现内存不足的提示,这种设计非常适合移动终端的需要。

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

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

相关文章

C++学习| QT下载安装、VS配置QT

QT介绍 Qt:1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架。 应用:既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。 对比MFC:MFC和QT两者都是用于C图形用户界面应用程序。 跨平…

c#反射用法

在 C# 中,反射是一种能够在运行时检查类型信息、访问属性和调用方法的机制。通过反射,你可以动态地操作类型、对象和程序集,而无需在编译时知道这些类型的具体信息。 反射提供了一组 API,可以让你在运行时获取和操作类型的信息。…

念念不忘智能编程,必有回响CodeArts Snap

开发者的碎碎念 之前在【我与ModelArts的故事】的文章里,分享过我学习新技术的经历,主要有: 自主学习,比如自学Python;借助华为云的产品边用边学。 在围着"编程学习"这座城池,外围来来回回转了…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第六天-文件系统(物联技术666)

链接:https://pan.baidu.com/s/1VUc8cGI7bTtXuGepZZY3Ng?pwd1688 提取码:1688 1、windows和linux之间可以,利用samb服务器共享 2、linux和linux之间可以利用nfs共享 3、windows和linux还可以利用telnet : # telnetd WINDOWS上…

适用于 Windows 的 10 个最佳数据恢复工具学习

在数字时代,数据就是一切。从珍贵的家庭照片和重要的工作文档到最喜欢的音乐和电影,我们的生活越来越多地存储在各种设备上。系统崩溃、意外删除或恶意病毒都可能使您的宝贵数据瞬间消失。这就是数据恢复工具的用武之地。 10 个最佳数据恢复工具 这些软…

3 JS类型 值和变量

计算机对value进行操作。 value有不同的类型。每种语言都有其自身的类型集合。编程语言的类型集是该编程语言的基本特性。 value需要保存一个变量中。 变量的工作机制是变成语言的另一个基本特性。 3.1概述和定义 JS类型分为: 原始类型和对象类型。 原始类型&am…

消除游戏(第十三届蓝桥杯省赛C++C组 , 第十三届蓝桥杯省赛PythonA/B/研究生组)

在一个字符串 S 中,如果 SiSi−1 且 Si≠Si1,则称 Si 和 Si1 为边缘字符。 如果 Si≠Si−1 且 SiSi1,则 Si−1和 Si 也称为边缘字符。 其它的字符都不是边缘字符。 对于一个给定的串 S,一次操作可以一次性删除该串中的所有边缘…

python爬虫实战——自动话获取淘宝商品数据

嗨喽,大家好呀~这里是爱看美女的茜茜呐 开发环境: python 3.8 pycharm 专业版 三方库: DrissionPage >>> pip install DrissionPage 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) …

go语言(十九)---- channel

channel的使用 //1. 发送value到channelchannel <- value //2. 接收并将其丢弃<- channel //3. 从channel中接收数据&#xff0c;并将其赋值给x x : <- channel 例子 package mainimport "fmt"func main() {//定义一个channelc : make(chan int)go func…

【数据结构与算法】5.详解双向链表的基本操作(Java语言实现)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

SpringBoot之时间数据前端显示格式化

背景 在实际我们通常需要在前端显示对数据操作的时间或者最近的更新时间&#xff0c;如果我们只是简单的使用 LocalDateTime.now()来传入数据不进行任何处理那么我们就会得到非常难看的数据 解决方式&#xff1a; 1). 方式一 在属性上加上注解&#xff0c;对日期进行格式…

LeetCode.42. 接雨水

题目 题目链接 分析 读完本题以及结合题目给出的图我们可以很直观的看到&#xff0c;这道题目是让我们求形成凹槽的面积。 我们可以针对每一个数字形成凹槽的面积进行计算&#xff0c;然后相加数组每一个数字形成凹槽的面积即可。 那么问题来了&#xff0c;怎么知道一个数…

【Java与网络6】实现一个自己的HTTP浏览器

前面我们讨论了HTTP协议的基本结构和Socket编程的基本原理&#xff0c;本文我们来整个大活&#xff1a;自己实现一个简单的浏览器。 目录 1.主线程循环体 2.readHostAndPort()方法的实现 3.readHttpRequest()方法的实现 4.sendHttpRequest()方法的实现 5.readHttpRespons…

深度强化学习(王树森)笔记03

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

STM32——创建HAL库工程

第一步 新建工程文件夹 所有文件夹存放的内容&#xff1a; 第二步 拷贝/新建工程相关文件 1、Drivers&#xff08;创建如下文件夹&#xff0c;除readme.txt&#xff09; 文件夹存放的内容&#xff1a; 2、Middlewares和output暂时不需要创建&#xff08;目前用不到&#x…

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…

华为配置在用户物理位置变化时部署业务随行示例(V200R006C00、V200R007C00、V200R008C00)

配置在用户物理位置变化时部署业务随行示例&#xff08;V200R006C00、V200R007C00、V200R008C00&#xff09; 业务随行简介配置注意事项组网需求需求分析数据规划配置思路操作步骤配置文件 组网图形 图1 组网图 业务随行简介配置注意事项组网需求需求分析数据规划配置思路操作步…

2401llvm,合并clang语法树

ASTImporter:合并ClangAST ASTImporter类是Clang的核心库AST库的一部分.它导入一个ASTContext的节点到另一个ASTContext中. 这里,假设你对ClangAST有基本了解.如果你想了解有关AST结构的更多信息,见ClangAST简介.匹配ClangAST在此. 介绍 ASTContext包含长期有的,可在文件的整…

新建一个基于标准库的工程(STM32)

目录 1.新建存放工程的文件夹 2.打开KEIL5软件 3.新建一个本次工程的文件夹 4.添加工程的必要文件 4.1打开STM32的启动文件 ​编辑 4.2&#xff1a; 4.3添加内核寄存器文件 ​编辑 5.回到keil5软件&#xff0c;将刚才复制的那些文件添加到工程中 5.1添加一个启动文件&am…

浅谈WPF之样式与资源

WPF通过样式&#xff0c;不仅可以方便的设置控件元素的展示方式&#xff0c;给用户呈现多样化的体验&#xff0c;还简化配置&#xff0c;避免重复设置元素的属性&#xff0c;以达到节约成本&#xff0c;提高工作效率的目的&#xff0c;样式也是资源的一种表现形式。本文以一个简…