版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Android体系结构和基本组件,武汉科技大学计算机学院 2020年7月,嵌入式系统开发与设计,Android体系结构,3,Android系统架构,4,Android分层结构,Android系统使用了软件栈(Software Stack)来构建Android分层结构 从上到下依次为 应用程序层 应用程序框架层 核心类库 Linux内核,5,应用程序层,Android应用程序层集成了核心应用程序,包括 email客户端 SMS短消息程序 Google日历 Google地图 浏览器 联系人管理程序 上述程序在Android系统发布时作为核心程序打包发布 Android应用程序由Java语言编写,6
2、,应用程序框架层,该层为开发者提供API框架 提供了用来创建Android程序的类 简化Android组件的重用方式 通过该层的软件规范,可以进行功能的扩展 可以在规定的安全限制之下进行程序之间的共享,7,应用程序框架层(2),核心的应用程序服务 活动管理器(Activity Manager)管理应用程序生命周期及Activity栈 视图(Views)用来创建程序的用户界面,包括列表、网格、文本框等 通知管理器(Notification Manager )用来在状态栏显示应用程序给用户的通知 内容管理器(Content Providers)使得应用程序之间可以进行数据共享 资源管理器(Reso
3、urce Manager)提供对字符串和图像等非代码资源的访问,8,核心类库,Android包含了C/C+库 被Android系统中不同的组件所使用 通过应用程序框架为开发者提供服务,9,库(Libraries),库(Libraries) 系统C库 继承自BSD的标准C系统函数库 为基于Linux的嵌入式系统进行了定制和优化,10,库(Libraries)(2),媒体库 基于Packet Video OpenCore,第三方库 支持多种常用音视频编解码 Mpeg4,H.264,MP3等 支持静态图像文件 JPG,PNG等 Surface Manager 管理显示子系统 为多个应用程序提供2D和
4、3D图层无缝融合 LibWebCore Web浏览器引擎 用来支持Android浏览器和可嵌入的Web视图,11,库(Libraries)(3),SGL 2D图形引擎的核心库 SQLite 轻量级关系数据库引擎 所有程序可用 FreeType 用来支持位图和矢量字体渲染 SSL 用来支持安全套接字层(SSL)加密协议的安全Internet通信 3D Libraries OpenGL的嵌入式版本OpenGL ES 可使用硬件3D加速或者软件3D加速,12,运行时(Run-time),Android Run-Time包括两个部分 核心库 Dalvik虚拟机 核心库 提供JAVA 编程语言核心库的大
5、多数功能 Dalvik虚拟机 Google为Android设计的Java虚拟机,13,运行时(Run-time)(2),Dalvik虚拟机 Android程序运行于Dalvik虚拟机之上 设计与Java虚拟机不同 Dalvik虚拟机运行的是Dex专有文件格式,JVM运行Java字节码 Dalvik是基于寄存器进行设计,JVM是基于栈 Android程序与虚拟机的关系 每个Android程序都有自己的进程,拥有一个独立的Dalvik虚拟机实例 Dalvik虚拟机被设计成为一个设备,可以高效的同时运行多个虚拟系统 Android程序通过编译后还需要通过dx工具转换为.dex文件 Dalvik虚拟机
6、执行.dex文件,14,运行时(Run-time)(3),Dalvik虚拟机的特征 专有文件格式.dex 通过dex将应用中所定义的许多类生成的class文件整合到一个文件中,减少了冗余信息,文件大小和I/O操作数量,提高类的查找速度 增加对新操作码的支持 文件结构简洁,使用等长指令,执行效率高 扩大了只读结构大小,利于程序间数据共享 针对.dex的优化 针对小内存进行了优化 基于寄存器 提高了代码执行效率,代价是在硬件和通用性上的降低 应用/进程/虚拟机的对应 实现进程之间的隔离,保护程序安全 Dalvik虚拟机依赖操作系统底层 线程调度和管理,内存分配和管理,互斥等,15,Linux内核,
7、Android的操作系统核心 Android 4.0之前的Linux内核是基于Linux 2.6 Android 4.0、4.1和4.2是基于Linux 3.0 但不是完全的Linux,不包含全部的Linux 系统初始化和编程接口和标准的Linux 系统是有所不同的 Android的操作系统核心服务 可以看做是硬件层和系统(软件)上层的抽象层 安全性,内存管理,进程管理, 网络协议栈,电源管理和驱动,16,Linux内核(2),显示驱动(Display Driver) 基于Linux的帧缓冲(Frame Buffer)驱动 照相机驱动(Camera Driver) 基于Linux的Video
8、for Linux驱动 蓝牙驱动(Bluetooth Driver) 基于蓝牙(IEEE 802.15.1标准)的无线传输技术 Flash存储驱动(Flash Memory Driver) 基于MTD的Flash驱动程序 Binder IPC驱动 Android的特殊驱动程序,具有单独的设备节点,提供进程间通信的功能,17,Linux内核(3),USB驱动(USB Driver) 为移动智能终端的USB接口提供驱动 键盘驱动(KeyBoard Driver) 作为输入设备的键盘驱动 WiFi驱动 基于IEEE 802.11标准的驱动程序 音频驱动(Audio Driver) 基于ALSA(Ad
9、vanced Linux Sound Architecture)的高级Linux声音体系驱动 Power Management(电源管理) 电池电量等,Android进程与线程,19,进程和线程,进程 具有独立功能的程序在操作系统中的运行活动 资源分配和调度的独立单位 线程 进程中的独立实体 CPU进行调度的基本单位 不拥有系统资源,拥有运行使用资源 进程与线程的映射 一对一 一对多 多对多,20,Android进程,Android的基础操作系统 在Android的操作系统层是Linux 使用Linux进程 Android进程 系统会为Andorid程序分配Linux用户ID 每个进程会有相应
10、的权限,实现进程之间的安全 用户进程的创建 如应用程序组件是第一次启动且无其他组件运行,Android系统为应用程序创建单线程的Linux进程 默认同一应用程序的所有组件运行在同一个进程和线程里 称为main主线程 如进程已存在,则组件运行在已有进程或线程中;或者创建额外的线程中;或者指定组件运行在其他进程中,21,Android进程(2),Android进程的控制 在manifest文件中来设置组件所在的进程 组件可以运行在自己所在程序的进程中或者与某些组件共享进程 进程的终止 当内存不足或活动进程需要内存时,Android系统会根据内存使用情况终止其他进程 被终止进程会在需要时重新启动,2
11、2,Android进程(3),Android进程的生命周期 Android系统尽可能维持进程在内存中的存在 移动智能终端的内存受限,在必要时系统会终止旧进程来提供内存空间 根据进程的重要性来选择哪些进程会被先终止 重要性小的先被终止 Android进程的重要性等级划分 前台进程 可见进程 服务进程 后台进程 空进程,23,Android进程(4),前台进程 正在执行的程序的进程,包括 进程的一个activity正在与用户交互 进程拥有一个绑定在正在与用户交互的activity上的service 进程拥有一个前台运行的Service 进程拥有一个正在执行生命周期中onCreate(), onSt
12、art()或onDestory()方法的Service 进程拥有一个正在执行onReceive()方法的BroadcastReceiver 前台进程通常不多 当内存太小以至于不能容纳所有的可能前台进程时,一些前台进程就会被终止,24,Android进程(5),可见进程 不拥有运行于前台的组件,包括 拥有不在前台但可见的activity 前台activity启动对话框时 服务进程 进程拥有绑定到可见activity的Service 进程运行了被startService()启动的Service 后台进程 进程拥有不可见的activity 空进程 进程,不拥有任何active的组件,25,Andro
13、id进程(6),Android根据进程中当前active组件的重要性,来安排其进程级别 例如,如果一个进程拥有一个service和一个可见的activity,进程会被定为可见进程,而不是服务进程。 被其它进程所依赖的进程,其级别可能会被提高 拥有service的进程比拥有后台activity的进程级别高 当一个activity启动一个需长时间执行的操作时,启动Service比创建一个线程效率高 使用service能保证操作至少有“service进程”的优先级,26,Android进程(7),进程间通讯 使用远程过程调用(remote procedure call,RPC)提供的进程间通信(IP
14、C)机制 被activity或其他应用程序组件调用的方法将(在其他进程中)被远程执行,而所有的结果将被返回给调用者 要求把方法调用及其数据分解到操作系统可以理解的程度,并将其从本地的进程和地址空间传输至远程的进程和地址空间,然后在远程进程中重新组装并执行这个调用。执行后的返回值将被反向传输回来 Android提供了执行IPC事务所需的全部代码 需要关注定义和实现RPC编程接口上即可,27,Android线程,Android UI线程 应用程序启动时,系统为之创建“main”主线程,有时也称为UI线程 负责将事件分发给相应用户界面的widget 负责应用程序与Android UI组件包之间的交互
15、 不是每个组件的实例都拥有单独的线程 UI线程中实例化同一个进程中的所有组件 UI线程分发对每个组件的系统调用 对系统回调进行响应的方法总是运行在UI线程 Android UI线程的要点 不要让UI线程做每一件事情 UI线程的阻塞超过一定时间(大约5s),会引起ANR“应用程序没有响应”对话框 单线程模式下不要阻塞UI线程,也不要在UI线程之外访问UI组件包,28,Android线程(2),工作线程 为保证程序的响应能力,创建单独的线程来完成耗时的操作 注意:工作线程不能访问UI组件包 否则可能导致不明确、不可预见的后果,并且难以跟踪 需确保工作线程完成工作,UI线程进行UI操作 通过使用不同
16、的方法可以达到 代码复杂程度增加了 为确保代码不会变的特别复杂并且难以维护,对于复杂操作可以采用异步任务来完成 异步任务 允许以异步方式来操作用户界面 异步任务首先阻塞工作线程,然后在UI线程中进行结果的显示 不需要人工干预,Android SDK,30,Android SDK,Android SDK提供开发Android应用程序所使用的开发组件 Windows/Linux/Mac平台上均有对应SDK 包含了Android平台上的工具集 以Java语言为基础 Android SDK提供的主要功能 访问摄像头和GPS等硬件 自带的Google地图和LBS服务 后台服务 SQLite数据库 数据共
17、享和应用程序通信 图形支持 优化的内存和进程管理 ,31,Android SDK(2),Android SDK所支持的操作系统: Windows XP (32-bit) or Vista (32- or 64-bit) or Win 7 Mac OS X 10.4.8 or later (x86 only) Linux,32,Android SDK目录,在安装Android SDK的android-sdk-windows目录中,33,Android SDK目录(2),add-ons 保存附加库 例如Google Maps Docs Android SDK API参考文档 可以对API进行查阅
18、Extras 扩展插件 提供向下兼容的功能,34,Android SDK目录(3),Platforms 每个平台的SDK真正的文件 根据API Level划分的SDK版本 最新的android-17文件夹,进入后是Android 4.2 SDK的主要文件 data保存着一些系统资源 skins是Android模拟器的皮肤 templates是工程创建的默认模板 android.jar是该版本的主要framework文件 较早版本还包括了 ant为ant编译脚本 images是模拟器映像文件 tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx
19、,35,Android SDK目录(4),platform-tools 保存着一些通用工具 比如adb、和aapt、aidl、dx等文件,Android123提示 这里和platforms目录中tools文件夹有些重复(主要指较低版本) 从android 2.3开始这些工具被划分为通用 主要工具 adb工具:Android Debug Bridge,通用调试工具,可以管理设备、手机模拟器的状态 aapt工具:Android Asset Packaging Tool , 可以查看, 创建, 更新ZIP格式的文档附件(zip, jar, apk),也可将资源文件编译成二进制文件 aidl工具:An
20、droid Interface Definition Language,即Android接口描述语言 dx工具:Android SDK的编译器。当运行Java文件,dx.exe将创建一个带有.dex后缀Dalvik可执行格式的文件,36,Android SDK目录(5),Samples Android SDK自带的默认示例工程 包括了较为全面的Android程序设计内容 system-images 针对不同处理器的system images Tools 包含了重要的工具 ddms用于启动Android调试工具 屏幕截图和文件管理器 draw9patch是绘制android平台的可缩放png图片
21、的工具 sqlite3可以在PC上操作SQLite数据库 Monkeyrunner是压力测试应用,模拟用户随机按键 mksdcard是模拟器SD映像的创建工具 emulator是android模拟器主程序 traceview作为android平台上重要的调试工具,37,Android SDK目录(6),android.jar 标准压缩包 包含了编译后的class文件 包含了全部的API,38,Android SDK目录(7),学习Android开发需要了解Android SDK 通过SDK帮助文档,39,Android SDK目录(8),SDK文档的阅读需要循序渐进 了解Android 了解其
22、开发工具链 了解环境搭建 熟悉API并进行练习,40,Android SDK目录(9),通过SDK文档来深入了解Android开发 SDK文档中提供了相应的支持,41,Android SDK目录(10),根据需要来进行了解,42,Android SDK提供的实例,Android SDK的Samples提供了丰富的实例,43,Android SDK提供的实例(2),SkeletonApp 演示如何使用Android SDK提供的视图组件 如EditText、Button、ImageView和菜单等 ApiDemos 演示了许多Android API,包括了app、content、graphic和
23、media等 通过该示例来了解Android API NotePad 记事本程序 演示了文本的新建、编辑和删除等操作 LunarLander 演示了一个登陆月球的小游戏 主要涉及到动画、键盘快捷键、线程的实现等,44,Android SDK提供的实例(3),Home 演示主题类软件,实现一套新的主题界面并注册到系统主题当中 如何开发主题类应用 SoftKeyBoard 演示软键盘与输入框事件的绑定,自动显示软键盘 如何使用软键盘 Snake 贪吃蛇 自定义视图组件的实现和控制,游戏的设计开发 JetBoy 具备声音支持的游戏实例 演示多媒体支持下的游戏设计开发,45,Android核心开发包,
24、android.util 包含一些底层辅助类, 例如特定的容器类,XML辅助工具类等 android.os 提供基本的操作服务,消息传递和进程间通信IPC android.grpics 作为核心渲染包,提供图形渲染功能 android.text/android.text.method/android.text.style/android.text.util 提供一套丰富的文本处理工具,支持富文本,输入模式,46,Android核心开发包(2),android.database 包含底层API处理数据库,方便操作数据库表和数据 android.content 提供各种服务访问数据在手机设备上,程
25、序安装到手机设备和其他相关资源,以及内容提供展示动态数据 android.view 核心用户界面框架 android.widget 提供标准用户界面元素,lists(列表) ,buttons(按钮),layout managers(布局管理器)等,是组成我们界面的基本元素,47,Android核心开发包(3),android.app 提供高层应用程序模型,实现使用Activity vider 提供方便调用系统提供的content providers的接口 android.telepony 提供API交互和手机设备的通话接口 android.webikit 包含一系列工作在
26、基于Web内容的API,Android 基本组件,49,Android基本组件,Android应用程序由以下部分构成 Activity BroadcastReceiver Service Content Provider Intent/Intent Filter 不是每个程序都需要上述所有组件 对上述组件进行组合来进行应用程序的编写 通过AndroidManifest.xml来实现具体的组件组合,50,Activity,最基本的Android模块之一 提供使用者一个交互式的接口功能 可以看做是应用中的一个单独屏幕 每个Activity被实现为一个继承于Activity基类的单独的类 Andro
27、id应用程序中的Activity 一般Android应用程序中都有多个Activity Activity之间互相跳转 例如通过button,51,Activity(2),Activity的管理 所有的Activity在系统中的Activity栈中管理 新的Activity执行后被放置到栈的顶部,状态转变为running Activity 先前的Activity仍然在栈中,但不在前台 Activity生命周期 Active/running Paused Stop Finish/kill,52,Service,Service 服务 运行在后台的一段代码 长期存活,运行在自己的进程或者其他程序的的上
28、下文中 取决于自身的需要 运行时不具有UI编码 与其他组件的关系 其他组件可以绑定到一个Service 通过远程调用RPC来调用,53,Service(2),Service的生命周期 通过其他应用程序组件启动、终止和控制 包括其他service、activity和broadcastreceiver 适合于需要定期或者持续执行不与用户交互的操作 启动的Service具有比非active状态的Activity更高的优先级 防止被意外的终止 当Service占用了必需资源时,会被终止;在资源可用时,Service会被自动重启 应用程序可以作为服务 需要定时更新,但用户交互少,54,Intent/In
29、tent Filter,Intent 意图 一种消息传递机制,定义为对要进行的操作的抽象描述 与特定的数据一起声明执行某个动作的意图 可以进行屏幕之间的切换,描述了应用程序想要做什么 Intent的构成 动作或者说需要进行的动作 动作对应的数据,55,Intent/Intent Filter(2),Intent在Android应用程序中的作用 启动Activity 启动特定的Activity 启动未指明的Activity 处理Activity的返回值 支持Android系统中任意两个应用程序组件之间的交互 在系统范围内广播消息 任何应用程序都可以注册广播接收器来监听和响应广播的Intent,从
30、而能够事件来创建事件驱动的应用程序 广播公布系统事件 Intent启动Activity的方式 显示:通过指定要加载的类 隐式:通过请求对一组数据执行某个动作,56,Intent/Intent Filter(3),Intent Filter 用来注册Activity、Service和Broadcast Receiver并对一个动作或一类特定数据进行处理 告诉Android系统如何找到合适的处理程序 Intent Filter的使用方法 使用标签及其属性来指定一个组件所支持的动作、分类和数据 可以使用Intent Filter作为插件和扩展 Android系统对Intent Filter进行解析 隐式的Intent被解析为一个单一的活动 如果有多个活动可以完成对指定数据的动作,那么启动最合适的活动,57,Broadcast Receiver,Intent广播(Broadcast)事件 Intent可以用作不同进程间传递数据和事件的媒介 由应用程序或者Android系统本身来广播一些事件的到来 监听(通过注册Broadcast Receiver)并可以获取Intent中的数据 Broadcast Receiver Broadca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电梯公司技术外包合同
- 项目部成本控制外包合同
- 2025年氢燃料电池测试技术应用前景预测
- 2025门店巡检《日常核查》模拟考试卷
- 2026年二建机电建工网校基础练习题
- 护理之路永无终点
- 2028年兰州七里河区房屋租赁合同模板
- 2026年委托加工合同二篇
- 护理课件下载的最佳途径与技巧
- 护理质量改进:跨学科合作的重要性
- 2026届深圳二模数学试题+答案
- 雨课堂学堂在线学堂云《人工智能导论(复旦)》单元测试考核答案
- 衣服干洗技术培训课件
- SH∕T 3097-2017 石油化工静电接地设计规范
- 线路精确改道作业指导书(普速)
- 铧式犁说明书
- GB/T 27021.9-2021合格评定管理体系审核认证机构要求第9部分:反贿赂管理体系审核与认证能力要求
- GB/T 19680-2013物流企业分类与评估指标
- 最新-自动控制元件及线路-课件
- 瓦斯抽放泵大修技术要求(修改)
- 一例髋臼骨折护理查房演示文稿
评论
0/150
提交评论