手机操作系统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的稳定性,正常情况下最多单个应用崩溃,但整个系统不会崩溃,也永远不会出现内存不足的提示,这种设计非常适合移动终端的需要。
相关文章:
手机操作系统Android
▶1.Android系统概述 Andaid(读[安卓)由Coosle公司和开放手机联盟共同开发,它是基于Lmx内核的开源操作系统。Andtoid主要用于移动设备,如智能手机和平板计算机。2008年发布了第一部Andtoid智能手机,以后Android逐渐扩展到平板计算机、电视、…...

2024年,你是否还在迷茫?
2024年,你是否还在迷茫? 别担心!鸿蒙来了,这个未来技术的制高点,为你提供了答案! 诸多大厂疯抢、24年预计鸿蒙相关的岗位需求将达到百万级、就业均薪达到19K,全国高校开课…… 种种现象都在表…...

ART: Automatic multi-step reasoning and tool-use for large language models 导读
ART: Automatic multi-step reasoning and tool-use for large language models 本文介绍了一种名为“自动推理和工具使用(ART)”的新框架,用于解决大型语言模型(LLM)在处理复杂任务时需要手动编写程序的问题。该框架可…...

Github 2024-01-26 开源项目日报Top10
根据Github Trendings的统计,今日(2024-01-26统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4Jupyter Notebook项目2HTML项目1Shell项目1Dockerfile项目1非开发语言项目1Go项目1Rust项目1 高级…...

免费的 UI 设计资源网站 Top 8
今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站,尤其是一些材料站。它们是免费下载的,材料的风格目前很流行,适合不同的项目。非常适合平面设计WEB/UI设计师收藏,接下…...
人机协同对人工智能治理的影响
人机协同对人工智能治理的影响是多方面的。 首先,人机协同可以提供更有效的人工智能监管和治理机制。人工智能系统通常需要大量的数据来训练和运行,而人类在监管和治理方面有独特的能力。通过人机协同,人们可以利用他们的主观意见和专业知识来…...
Form.List的使用,设置某个字段的值
1.Form.Item的name <Form.Itemname{[base_range, company_base_range_start]}dependencies{[[base_range, company_base_range_end]]}rules{[{ required: true, message: 请输入下限 },{validator: (_, value) >validateMoneyRule(value,base_range?.company_base_range…...
React16源码: React中的updateHostComponent的源码实现
updateHostComponent 1 )概述 在 completeWork 阶段的 HostComponent 处理,继续前文所述在更新的逻辑里面,调用了 updateHostComponent进行前后props对应的dom的attributes变化的对比情况这个方法也是根据不同环境来定义的,我们这…...

uniapp导入uView组件库
目录 准备工作 1. 新建一个项目 2. 导入uview组件库 3. 关于SCSS 配置步骤 1. 引入uView主JS库 2. 在引入uView的全局SCSS 3. 引入uView基础样式 4. 配置easycom组件模式 添加效果实验运行即可成功 准备工作 1. 新建一个项目 2. 导入uview组件库 在进行配置之前&#x…...

防御保护----防火墙的安全策略、NAT策略实验
实验拓扑: 实验要求: 1.生产区在工作时间(9:00-18:00)内可以访问DMZ区,仅可以访问http服务器; 2.办公区全天可以访问DMZ区,其中10.0.2.10可以访问FTP服务器和HTTP服务器…...

# 安徽锐锋科技IDMS系统简介
IDMS 由安徽锐锋科技独立开发 该系统负责和海算以及UE\UNITY的无缝衔接并具备远程数据库访问、高速数据库的自动创建及数据存储、支持MQTT等多种物联网接口,支持多种算法。主要完成由于物料、人员、生产、故障、不良异常、订单异常带来的生产损失,通过海…...

Notepad在文件中查找多行相同内容的文字
Notepad在文件中查找多行相同的内容 查找:打开 Notepad软件, Ctrl F 查找 。输入关键词, 点击【在当前文件中查找】。 复制:直接在下方的【搜索结果】复制。 Notepad提取含有特定字符串的行 详情见: https://blog…...
Python高超音速导弹
Python高超音速导弹的全自动化开发研发具有重要性的原因如下: 提高研发效率:全自动化开发可以通过自动化工具和流程,快速完成各种任务,包括代码编写、测试、集成和部署等。这样可以大大提高研发效率,缩短开发周期。 减…...

Java七大排序详解
排序 排序的概念 所谓排序 ,就是让一串记录,按照其中某些或者某个关键字的大小,递增或递减的排列起来的操作。 稳定性:就比如在待排序的序列中,存在多个具有相同关键字的记录 ,如果经过排序这些相同的关键…...

图像旋转角度计算并旋转
#!/usr/bin/python3 # -*- coding: utf-8 -*- import cv2 import numpy as np import timedef Rotate(img, angle0.0,fill0):"""旋转:param img:待旋转图像:param angle: 旋转角度:param fill:填充方式,默认0黑色填充:return: img: 旋转后…...

通过curl访问k8s集群获取证书或token的方式
K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持插件方式,通过API Server配置来启用插件。 1. Authentication(认证) 2. Authorization(授权) 3. Admission Control(准入控制&#…...

苍穹外卖-前端部分(持续更新中)
d 第二种:cmd中输入 vue ui进入图形化界面选择npm,vue2进行创建 先将创建的Vue框架导入Vsocde开发工具 然后ctrshiftp 输入npm 点击serve将项目启动 下这种写法跨域会报错: 解决方法:...

windows用mingw(g++)编译opencv,opencv_contrib,并install安装
windows下用mingw编译opencv貌似不支持cuda,选cuda会报错,我无法解决,所以没选cuda,下面两种编译方式支持。 如要用msvc编译opencv,参考我另外一篇文章 https://blog.csdn.net/weixin_44733606/article/details/1357…...

JDWP 协议及实现
JDWP 的协议细节并通过实际调试中的例子展开揭示 JDWP 的实现机制,JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。 JDWP 协议介绍 这里首先要说明一下 debugger 和 target vm。Target vm 中运行…...

利用ADS建立MIPI D-PHY链路仿真流程
根据MIPI D-PHY v1.2规范中对于互连电气参数的定义,本次仿真实例中,需要重点关注如下的设计参数: 1. 差分信号的插入损耗Sddij和回拨损耗Sddii; 2. 模式转换损耗Sdcxx、Scdxx; 3. 数据线与时钟线之间的串扰耦合(远、近端)。 设计者还可以结合CTS中的补充…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...