您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 02-武汉科技大学Android程序设计-体系解析
Android体系结构和基本组件武汉科技大学计算机学院2020年1月嵌入式系统开发与设计Android体系结构Android系统架构3Android分层结构Android系统使用了软件栈(SoftwareStack)来构建Android分层结构从上到下依次为应用程序层应用程序框架层核心类库Linux内核4应用程序层Android应用程序层集成了核心应用程序,包括email客户端SMS短消息程序Google日历Google地图浏览器联系人管理程序上述程序在Android系统发布时作为核心程序打包发布Android应用程序由Java语言编写5应用程序框架层该层为开发者提供API框架提供了用来创建Android程序的类简化Android组件的重用方式通过该层的软件规范,可以进行功能的扩展可以在规定的安全限制之下进行程序之间的共享6应用程序框架层(2)核心的应用程序服务活动管理器(ActivityManager)管理应用程序生命周期及Activity栈视图(Views)用来创建程序的用户界面,包括列表、网格、文本框等通知管理器(NotificationManager)用来在状态栏显示应用程序给用户的通知内容管理器(ContentProviders)使得应用程序之间可以进行数据共享资源管理器(ResourceManager)提供对字符串和图像等非代码资源的访问7核心类库Android包含了C/C++库被Android系统中不同的组件所使用通过应用程序框架为开发者提供服务8库(Libraries)库(Libraries)系统C库继承自BSD的标准C系统函数库为基于Linux的嵌入式系统进行了定制和优化9库(Libraries)(2)媒体库基于PacketVideoOpenCore,第三方库支持多种常用音视频编解码Mpeg4,H.264,MP3等支持静态图像文件JPG,PNG等SurfaceManager管理显示子系统为多个应用程序提供2D和3D图层无缝融合LibWebCoreWeb浏览器引擎用来支持Android浏览器和可嵌入的Web视图10库(Libraries)(3)SGL2D图形引擎的核心库SQLite轻量级关系数据库引擎所有程序可用FreeType用来支持位图和矢量字体渲染SSL用来支持安全套接字层(SSL)加密协议的安全Internet通信3DLibrariesOpenGL的嵌入式版本OpenGLES可使用硬件3D加速或者软件3D加速11运行时(Run-time)AndroidRun-Time包括两个部分核心库Dalvik虚拟机核心库提供JAVA编程语言核心库的大多数功能Dalvik虚拟机Google为Android设计的Java虚拟机12运行时(Run-time)(2)Dalvik虚拟机Android程序运行于Dalvik虚拟机之上设计与Java虚拟机不同Dalvik虚拟机运行的是Dex专有文件格式,JVM运行Java字节码Dalvik是基于寄存器进行设计,JVM是基于栈Android程序与虚拟机的关系每个Android程序都有自己的进程,拥有一个独立的Dalvik虚拟机实例Dalvik虚拟机被设计成为一个设备,可以高效的同时运行多个虚拟系统Android程序通过编译后还需要通过dx工具转换为.dex文件Dalvik虚拟机执行.dex文件13运行时(Run-time)(3)Dalvik虚拟机的特征专有文件格式.dex通过dex将应用中所定义的许多类生成的class文件整合到一个文件中,减少了冗余信息,文件大小和I/O操作数量,提高类的查找速度增加对新操作码的支持文件结构简洁,使用等长指令,执行效率高扩大了只读结构大小,利于程序间数据共享针对.dex的优化针对小内存进行了优化基于寄存器提高了代码执行效率,代价是在硬件和通用性上的降低应用/进程/虚拟机的对应实现进程之间的隔离,保护程序安全Dalvik虚拟机依赖操作系统底层线程调度和管理,内存分配和管理,互斥等14Linux内核Android的操作系统核心Android4.0之前的Linux内核是基于Linux2.6Android4.0、4.1和4.2是基于Linux3.0但不是完全的Linux,不包含全部的Linux系统初始化和编程接口和标准的Linux系统是有所不同的Android的操作系统核心服务可以看做是硬件层和系统(软件)上层的抽象层安全性,内存管理,进程管理,网络协议栈,电源管理和驱动15Linux内核(2)显示驱动(DisplayDriver)基于Linux的帧缓冲(FrameBuffer)驱动照相机驱动(CameraDriver)基于Linux的VideoforLinux驱动蓝牙驱动(BluetoothDriver)基于蓝牙(IEEE802.15.1标准)的无线传输技术Flash存储驱动(FlashMemoryDriver)基于MTD的Flash驱动程序BinderIPC驱动Android的特殊驱动程序,具有单独的设备节点,提供进程间通信的功能16Linux内核(3)USB驱动(USBDriver)为移动智能终端的USB接口提供驱动键盘驱动(KeyBoardDriver)作为输入设备的键盘驱动WiFi驱动基于IEEE802.11标准的驱动程序音频驱动(AudioDriver)基于ALSA(AdvancedLinuxSoundArchitecture)的高级Linux声音体系驱动PowerManagement(电源管理)电池电量等17Android进程与线程进程和线程进程具有独立功能的程序在操作系统中的运行活动资源分配和调度的独立单位线程进程中的独立实体CPU进行调度的基本单位不拥有系统资源,拥有运行使用资源进程与线程的映射一对一一对多多对多19Android进程Android的基础操作系统在Android的操作系统层是Linux使用Linux进程Android进程系统会为Andorid程序分配Linux用户ID每个进程会有相应的权限,实现进程之间的安全用户进程的创建如应用程序组件是第一次启动且无其他组件运行,Android系统为应用程序创建单线程的Linux进程默认同一应用程序的所有组件运行在同一个进程和线程里称为main主线程如进程已存在,则组件运行在已有进程或线程中;或者创建额外的线程中;或者指定组件运行在其他进程中20Android进程(2)Android进程的控制在manifest文件中来设置组件所在的进程组件可以运行在自己所在程序的进程中或者与某些组件共享进程进程的终止当内存不足或活动进程需要内存时,Android系统会根据内存使用情况终止其他进程被终止进程会在需要时重新启动21Android进程(3)Android进程的生命周期Android系统尽可能维持进程在内存中的存在移动智能终端的内存受限,在必要时系统会终止旧进程来提供内存空间根据进程的重要性来选择哪些进程会被先终止重要性小的先被终止Android进程的重要性等级划分前台进程可见进程服务进程后台进程空进程22Android进程(4)前台进程正在执行的程序的进程,包括进程的一个activity正在与用户交互进程拥有一个绑定在正在与用户交互的activity上的service进程拥有一个前台运行的Service进程拥有一个正在执行生命周期中onCreate(),onStart()或onDestory()方法的Service进程拥有一个正在执行onReceive()方法的BroadcastReceiver前台进程通常不多当内存太小以至于不能容纳所有的可能前台进程时,一些前台进程就会被终止23Android进程(5)可见进程不拥有运行于前台的组件,包括拥有不在前台但可见的activity前台activity启动对话框时服务进程进程拥有绑定到可见activity的Service进程运行了被startService()启动的Service后台进程进程拥有不可见的activity空进程进程,不拥有任何active的组件24Android进程(6)Android根据进程中当前active组件的重要性,来安排其进程级别例如,如果一个进程拥有一个service和一个可见的activity,进程会被定为可见进程,而不是服务进程。被其它进程所依赖的进程,其级别可能会被提高拥有service的进程比拥有后台activity的进程级别高当一个activity启动一个需长时间执行的操作时,启动Service比创建一个线程效率高使用service能保证操作至少有“service进程”的优先级25Android进程(7)进程间通讯使用远程过程调用(remoteprocedurecall,RPC)提供的进程间通信(IPC)机制被activity或其他应用程序组件调用的方法将(在其他进程中)被远程执行,而所有的结果将被返回给调用者要求把方法调用及其数据分解到操作系统可以理解的程度,并将其从本地的进程和地址空间传输至远程的进程和地址空间,然后在远程进程中重新组装并执行这个调用。执行后的返回值将被反向传输回来Android提供了执行IPC事务所需的全部代码需要关注定义和实现RPC编程接口上即可26Android线程AndroidUI线程应用程序启动时,系统为之创建“main”主线程,有时也称为UI线程负责将事件分发给相应用户界面的widget负责应用程序与AndroidUI组件包之间的交互不是每个组件的实例都拥有单独的线程UI线程中实例化同一个进程中的所有组件UI线程分发对每个组件的系统调用对系统回调进行响应的方法总是运行在UI线程AndroidUI线程的要点不要让UI线程做每一件事情UI线程的阻塞超过一定时间(大约5s),会引起ANR“应用程序没有响应”对话框单线程模式下不要阻塞UI线程,也不要在UI线程之外访问UI组件包27Android线程(2)工作线程为保证程序的响应能力,创建单独的线程来完成耗时的操作注意:工作线程不能访问UI组件包否则可能导致不明确、不可预见的后果,并且难以跟踪需确保工作线程完成工作,UI线程进行UI操作通过使用不同的方法可以达到代码复杂程度增加了为确保代码不会变的特别复杂并且难以维护,对于复杂操作可以采用异步任务来完成异步任务允许以异步方式来操作用户界面异步任务首先阻塞工作线程,然后在UI线程中进行结果的显示不需要人工干预28AndroidSDKAndroidSDKAndroidSDK提供开发Android应用程序所使用的开发组件Windows/Linux/Mac平台上均有对应SDK包含了Android平台上的工具集以Java语言为基础AndroidSDK提供的主要功能访问摄像头和GPS等硬件自带的Google地图和LBS服务后台服务SQLite数据库数据共享和应用程序通信图形支持优化的内存和进程管理…30AndroidSDK(2)AndroidSDK所支持的操作系统:WindowsXP(32-bit)orVista(32-or64-bit)orWin7MacOSX10.4.8orlater(x86only)Linux31AndroidSDK目录在安装AndroidSDK的android-sdk-windows目录中32AndroidSDK目录(2)add-ons保存附加库例如GoogleMapsDocsAndroidSDKAPI参考文档可以对API进行查阅Extras扩展插件提供向下兼容的功能33AndroidSDK目录(
本文标题:02-武汉科技大学Android程序设计-体系解析
链接地址:https://www.777doc.com/doc-3391957 .html