当前位置: 首页 > news >正文

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——1.5节Android应用程序运行的机制...

本节书摘来自异步社区《Android 3D游戏开发技术宝典——OpenGL ES 2.0》一书中的第1章,第1.5节Android应用程序运行的机制,作者 吴亚峰,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.5 Android应用程序运行的机制
Android 3D游戏开发技术宝典——OpenGL ES 2.0
上一节介绍了如何搭建Android开发环境、如何开发Hello Android应用程序以及Android应用程序的调试,接下来在本节中将简要地介绍Android应用程序的运行机制。

1.5.1 应用程序的系统架构
Android平台由应用程序、应用程序框架、Android运行时、系统库以及底层Linux内核构成,详细结构如图1-54所示。


157976b90b09088702cdaad9324da875689e6261

说明 应用程序层里面包含的就是需要读者去发挥创意开发的、各种各样丰富多彩的应用程序,这也是一般Android应用开发人员工作的层次。

1.5.2 应用程序框架
Android应用程序框架是开发Android应用的基础,开发者在开发时有大部分的时间用在调用这一层。Android应用程序框架包含活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、位置管理器、资源管理器以及通知管理器等,如图1-55所示。


1030f4d8230762b37d25fafbd8b2cc9d605cba62

应用程序框架层各部分的具体功能如下所列。

活动管理器(Activity Manager):管理所有应用程序的生命周期并提供相应的应用程序导航返回栈。
窗口管理器(Window Manager):管理所有的应用程序窗口。
内容提供者(Content Provider):用来在应用程序之间互相读取或者分享数据。
视图系统(View System):主要包含用来构建应用程序界面的基本控件,包含普通按钮、列表、文本框和单选按钮、复选框等。
包管理器(Package Manager):用来进行Android系统内的程序管理。
电话管理器(Telephone Manager):用来管理所有与移动电话相关的功能。
位置管理器(Location Manager):提供位置服务。
资源管理器(Resource Manager):为应用程序提供各种资源,如图片、布局文件以及本地化字符串等。
通知管理器(Notification Manager):用于管理显示在状态栏的应用程序中的通知信息。状态栏通常在手机的顶部,如短信、语音邮件提示以及剩余电量等全部会在这里显示。

1.5.3 Android运行时
Android运行时包括核心库(Core Libraires)以及Dalvik虚拟机(Dalvik Virtual Machine)两部分,如图1-56所示。


5a591262c4d1246c27efa53ce081548fcf476a12

核心库(Core Libraires)主要包括两部分,一部分是来自于JavaSE中的核心Java部分,如集合框架、多线程等。另一部分由Android核心库如android.os以及android.media等组成。
Dalvik虚拟机(Dalvik Virtual Machine)是一种基于寄存器的Java虚拟机,主要依靠转换工具dx将Java字节码转换为dex格式(.dex)。基于寄存器的Java虚拟机的优点是所需资源相对较少,同时使用硬件实现虚拟机也会比较容易。

说明 与传统的JavaME不同的是,每个Android应用程序都有一个自己特有的进程,每个应用程序都是使用一个自己持有的Dalvik虚拟机来执行的,而不像在大部分JavaME实现中,多个JavaME应用程序共享一个Java虚拟机进程。

1.5.4 系统库
应用程序框架是最接近于应用程序的软件组件服务,而更底层则是Android的系统函数库(Libraries),这部分是应用程序框架的支撑,其基本架构如图1-57所示。


afdc1190ca1d7b2cdb79144f09fa33e9271fa9f5

Surface Manager管理对显示子系统的访问,并且负责将不同应用程序2D及3D绘制的结果进行显示合成。
Media Framework(媒体函数库)是基于Packet Video公司的OpenCORE发展而成的,使用该函数库可以方便地播放以及录制多种常见格式的影音。这些格式主要包括:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG等。
SQLite是内嵌到Android系统中的一套轻量级的关系数据库引擎,支持关系数据库的各项功能。
OpenGL ES:Android是根据OpenGL ES1.0、1.1或2.0的 API标准来实现其3D绘图函数库的,该函数库可以以硬件加速方式执行,也可以用软件模拟方式执行(仅限OpenGL ES1.0与1.1),不过在没有硬件加速的情况下性能会有明显差距。
FreeType负责点阵字体以及向量字体的绘图显示。
WebKit本身是一个开源项目,许多浏览器也都是用WebKit引擎所开发的,Android下原生自带的浏览器就是基于其实现的。Android将其引入到系统库,大大方便了开发人员HTTP相关功能的开发。
SGL库为Android在2D绘图方面提供绘图引擎。
SSL位于TCP/IP与各种应用层协议之间,为数据通信提供支持。
Libc提供了一套针对于移动设备优化后的C标准库。

1.5.5 底层Linux内核
Android平台开放性的基础是因为其采用了Linux内核,如图1-58所示。Android平台中的操作系统采用了Linux 2.6版的内核,其包括显示驱动、摄像头驱动、Flash内存驱动、Binder(IPC)驱动、键盘驱动、WIFI驱动、视频驱动及电源驱动等。

Linux内核层是软件层与硬件层之间的桥梁,软件开发人员不必关心底层Linux内核的实现细节,只需将全部精力投入到上层的软件开发中。而实现底层Linux内核的工作是由Google和手机厂商来完成,如驱动的更新或者新驱动的编写等。


8c3bf122a0cf55d2f003bc3281c4c3b5871fc6ec

相关文章:

  • 《精通软件性能测试与LoadRunner最佳实战》—第2章2.2节性能测试需求分析
  • 《Windows Server 2012活动目录管理实践》——2.5 常见问题
  • 《SQL初学者指南(第2版)》——第2章 基本数据检索
  • 《CCNA学习指南:Cisco网络设备互连(ICND2)(第4版)》——1.1节理解VLAN 和VLAN Trunk 及排除相关故障...
  • 《Redis入门指南》一4.6 节省空间
  • 《深入理解JavaScript》——2.8 结论
  • 数据挖掘与数据化运营实战. 2.2 统计分析与数据挖掘的主要区别
  • 4个可以发送完整电子邮件的命令行工具
  • 《社会智能与综合集成系统》—第2章2.1节机器智能的发展
  • 《树莓派实战秘籍》——1.17添加重启按钮
  • 百度编辑器Ueditor 多图上传 图片在线管理的排序问题解决方案
  • 未来的C#之覆写放宽
  • 《机器人爱好者(第2辑)》——Robot Hut初印象
  • 《Linux指令从入门到精通》——4.2 Linux下的简单文字模式文本编辑器
  • Java 获取当前操作系统信息
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • isset在php5.6-和php7.0+的一些差异
  • js正则,这点儿就够用了
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • mysql常用命令汇总
  • Quartz初级教程
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • 大型网站性能监测、分析与优化常见问题QA
  • 模型微调
  • 探索 JS 中的模块化
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 译自由幺半群
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • HanLP分词命名实体提取详解
  • #预处理和函数的对比以及条件编译
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (26)4.7 字符函数和字符串函数
  • (7)STL算法之交换赋值
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)JAVA使用POI操作excel
  • (二)WCF的Binding模型
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)winform之ListView
  • (转)我也是一只IT小小鸟
  • ******IT公司面试题汇总+优秀技术博客汇总
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 设计模式初探
  • .net 验证控件和javaScript的冲突问题
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET值类型变量“活”在哪?