已阅读5页,还剩57页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android体系结构和基本组件,嵌入式系统开发与设计,Android体系结构,3,Android系统架构,4,Android分层结构,Android系统使用了软件栈(SoftwareStack)来构建Android分层结构从上到下依次为应用程序层应用程序框架层核心类库Linux内核,5,应用程序层,Android应用程序层集成了核心应用程序,包括email客户端SMS短消息程序Google日历Google地图浏览器联系人管理程序上述程序在Android系统发布时作为核心程序打包发布Android应用程序由Java语言编写,6,应用程序框架层,该层为开发者提供API框架提供了用来创建Android程序的类简化Android组件的重用方式通过该层的软件规范,可以进行功能的扩展可以在规定的安全限制之下进行程序之间的共享,7,应用程序框架层(2),核心的应用程序服务活动管理器(ActivityManager)管理应用程序生命周期及Activity栈视图(Views)用来创建程序的用户界面,包括列表、网格、文本框等通知管理器(NotificationManager)用来在状态栏显示应用程序给用户的通知内容管理器(ContentProviders)使得应用程序之间可以进行数据共享资源管理器(ResourceManager)提供对字符串和图像等非代码资源的访问,8,核心类库,Android包含了C/C+库被Android系统中不同的组件所使用通过应用程序框架为开发者提供服务,9,库(Libraries),库(Libraries)系统C库继承自BSD的标准C系统函数库为基于Linux的嵌入式系统进行了定制和优化,10,库(Libraries)(2),媒体库基于PacketVideoOpenCore,第三方库支持多种常用音视频编解码Mpeg4,H.264,MP3等支持静态图像文件JPG,PNG等SurfaceManager管理显示子系统为多个应用程序提供2D和3D图层无缝融合LibWebCoreWeb浏览器引擎用来支持Android浏览器和可嵌入的Web视图,11,库(Libraries)(3),SGL2D图形引擎的核心库SQLite轻量级关系数据库引擎所有程序可用FreeType用来支持位图和矢量字体渲染SSL用来支持安全套接字层(SSL)加密协议的安全Internet通信3DLibrariesOpenGL的嵌入式版本OpenGLES可使用硬件3D加速或者软件3D加速,12,运行时(Run-time),AndroidRun-Time包括两个部分核心库Dalvik虚拟机核心库提供JAVA编程语言核心库的大多数功能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虚拟机执行.dex文件,14,运行时(Run-time)(3),Dalvik虚拟机的特征专有文件格式.dex通过dex将应用中所定义的许多类生成的class文件整合到一个文件中,减少了冗余信息,文件大小和I/O操作数量,提高类的查找速度增加对新操作码的支持文件结构简洁,使用等长指令,执行效率高扩大了只读结构大小,利于程序间数据共享针对.dex的优化针对小内存进行了优化基于寄存器提高了代码执行效率,代价是在硬件和通用性上的降低应用/进程/虚拟机的对应实现进程之间的隔离,保护程序安全Dalvik虚拟机依赖操作系统底层线程调度和管理,内存分配和管理,互斥等,15,Linux内核,Android的操作系统核心Android4.0之前的Linux内核是基于Linux2.6Android4.0、4.1和4.2是基于Linux3.0但不是完全的Linux,不包含全部的Linux系统初始化和编程接口和标准的Linux系统是有所不同的Android的操作系统核心服务可以看做是硬件层和系统(软件)上层的抽象层安全性,内存管理,进程管理,网络协议栈,电源管理和驱动,16,Linux内核(2),显示驱动(DisplayDriver)基于Linux的帧缓冲(FrameBuffer)驱动照相机驱动(CameraDriver)基于Linux的VideoforLinux驱动蓝牙驱动(BluetoothDriver)基于蓝牙(IEEE802.15.1标准)的无线传输技术Flash存储驱动(FlashMemoryDriver)基于MTD的Flash驱动程序BinderIPC驱动Android的特殊驱动程序,具有单独的设备节点,提供进程间通信的功能,17,Linux内核(3),USB驱动(USBDriver)为移动智能终端的USB接口提供驱动键盘驱动(KeyBoardDriver)作为输入设备的键盘驱动WiFi驱动基于IEEE802.11标准的驱动程序音频驱动(AudioDriver)基于ALSA(AdvancedLinuxSoundArchitecture)的高级Linux声音体系驱动PowerManagement(电源管理)电池电量等,Android进程与线程,19,进程和线程,进程具有独立功能的程序在操作系统中的运行活动资源分配和调度的独立单位线程进程中的独立实体CPU进行调度的基本单位不拥有系统资源,拥有运行使用资源进程与线程的映射一对一一对多多对多,20,Android进程,Android的基础操作系统在Android的操作系统层是Linux使用Linux进程Android进程系统会为Andorid程序分配Linux用户ID每个进程会有相应的权限,实现进程之间的安全用户进程的创建如应用程序组件是第一次启动且无其他组件运行,Android系统为应用程序创建单线程的Linux进程默认同一应用程序的所有组件运行在同一个进程和线程里称为main主线程如进程已存在,则组件运行在已有进程或线程中;或者创建额外的线程中;或者指定组件运行在其他进程中,21,Android进程(2),Android进程的控制在manifest文件中来设置组件所在的进程组件可以运行在自己所在程序的进程中或者与某些组件共享进程进程的终止当内存不足或活动进程需要内存时,Android系统会根据内存使用情况终止其他进程被终止进程会在需要时重新启动,22,Android进程(3),Android进程的生命周期Android系统尽可能维持进程在内存中的存在移动智能终端的内存受限,在必要时系统会终止旧进程来提供内存空间根据进程的重要性来选择哪些进程会被先终止重要性小的先被终止Android进程的重要性等级划分前台进程可见进程服务进程后台进程空进程,23,Android进程(4),前台进程正在执行的程序的进程,包括进程的一个activity正在与用户交互进程拥有一个绑定在正在与用户交互的activity上的service进程拥有一个前台运行的Service进程拥有一个正在执行生命周期中onCreate(),onStart()或onDestory()方法的Service进程拥有一个正在执行onReceive()方法的BroadcastReceiver前台进程通常不多当内存太小以至于不能容纳所有的可能前台进程时,一些前台进程就会被终止,24,Android进程(5),可见进程不拥有运行于前台的组件,包括拥有不在前台但可见的activity前台activity启动对话框时服务进程进程拥有绑定到可见activity的Service进程运行了被startService()启动的Service后台进程进程拥有不可见的activity空进程进程,不拥有任何active的组件,25,Android进程(6),Android根据进程中当前active组件的重要性,来安排其进程级别例如,如果一个进程拥有一个service和一个可见的activity,进程会被定为可见进程,而不是服务进程。被其它进程所依赖的进程,其级别可能会被提高拥有service的进程比拥有后台activity的进程级别高当一个activity启动一个需长时间执行的操作时,启动Service比创建一个线程效率高使用service能保证操作至少有“service进程”的优先级,26,Android进程(7),进程间通讯使用远程过程调用(remoteprocedurecall,RPC)提供的进程间通信(IPC)机制被activity或其他应用程序组件调用的方法将(在其他进程中)被远程执行,而所有的结果将被返回给调用者要求把方法调用及其数据分解到操作系统可以理解的程度,并将其从本地的进程和地址空间传输至远程的进程和地址空间,然后在远程进程中重新组装并执行这个调用。执行后的返回值将被反向传输回来Android提供了执行IPC事务所需的全部代码需要关注定义和实现RPC编程接口上即可,27,Android线程,AndroidUI线程应用程序启动时,系统为之创建“main”主线程,有时也称为UI线程负责将事件分发给相应用户界面的widget负责应用程序与AndroidUI组件包之间的交互不是每个组件的实例都拥有单独的线程UI线程中实例化同一个进程中的所有组件UI线程分发对每个组件的系统调用对系统回调进行响应的方法总是运行在UI线程AndroidUI线程的要点不要让UI线程做每一件事情UI线程的阻塞超过一定时间(大约5s),会引起ANR“应用程序没有响应”对话框单线程模式下不要阻塞UI线程,也不要在UI线程之外访问UI组件包,28,Android线程(2),工作线程为保证程序的响应能力,创建单独的线程来完成耗时的操作注意:工作线程不能访问UI组件包否则可能导致不明确、不可预见的后果,并且难以跟踪需确保工作线程完成工作,UI线程进行UI操作通过使用不同的方法可以达到代码复杂程度增加了为确保代码不会变的特别复杂并且难以维护,对于复杂操作可以采用异步任务来完成异步任务允许以异步方式来操作用户界面异步任务首先阻塞工作线程,然后在UI线程中进行结果的显示不需要人工干预,AndroidSDK,30,AndroidSDK,AndroidSDK提供开发Android应用程序所使用的开发组件Windows/Linux/Mac平台上均有对应SDK包含了Android平台上的工具集以Java语言为基础AndroidSDK提供的主要功能访问摄像头和GPS等硬件自带的Google地图和LBS服务后台服务SQLite数据库数据共享和应用程序通信图形支持优化的内存和进程管理,31,AndroidSDK所支持的操作系统:WindowsXP(32-bit)orVista(32-or64-bit)MacOSX10.4.8orlater(x86only)Linux,32,AndroidSDK目录,在安装AndroidSDK的android-sdk-windows目录中,33,AndroidSDK目录(2),add-ons保存附加库例如GoogleMapsDocsAndroidSDKAPI参考文档可以对API进行查阅Extras扩展插件提供向下兼容的功能,34,AndroidSDK目录(3),Platforms每个平台的SDK真正的文件根据APILevel划分的SDK版本最新的android-17文件夹,进入后是Android4.2SDK的主要文件data保存着一些系统资源skins是Android模拟器的皮肤templates是工程创建的默认模板android.jar是该版本的主要framework文件较早版本还包括了ant为ant编译脚本images是模拟器映像文件tools目录里面包含了重要的编译工具,比如aapt、aidl、逆向调试工具dexdump和编译脚本dx,35,AndroidSDK目录(4),platform-tools保存着一些通用工具比如adb、和aapt、aidl、dx等文件,Android123提示这里和platforms目录中tools文件夹有些重复(主要指较低版本)从android2.3开始这些工具被划分为通用主要工具adb工具:AndroidDebugBridge,通用调试工具,可以管理设备、手机模拟器的状态aapt工具:AndroidAssetPackagingTool,可以查看,创建,更新ZIP格式的文档附件(zip,jar,apk),也可将资源文件编译成二进制文件aidl工具:AndroidInterfaceDefinitionLanguage,即Android接口描述语言dx工具:AndroidSDK的编译器。当运行Java文件,dx.exe将创建一个带有.dex后缀Dalvik可执行格式的文件,36,AndroidSDK目录(5),SamplesAndroidSDK自带的默认示例工程包括了较为全面的Android程序设计内容system-images针对不同处理器的systemimagesTools包含了重要的工具ddms用于启动Android调试工具屏幕截图和文件管理器draw9patch是绘制android平台的可缩放png图片的工具sqlite3可以在PC上操作SQLite数据库Monkeyrunner是压力测试应用,模拟用户随机按键mksdcard是模拟器SD映像的创建工具emulator是android模拟器主程序traceview作为android平台上重要的调试工具,37,AndroidSDK目录(6),android.jar标准压缩包包含了编译后的class文件包含了全部的API,38,AndroidSDK目录(7),学习Android开发需要了解AndroidSDK通过SDK帮助文档,39,AndroidSDK目录(8),SDK文档的阅读需要循序渐进了解Android了解其开发工具链了解环境搭建熟悉API并进行联系,40,AndroidSDK目录(9),通过SDK文档来深入了解Android开发SDK文档中提供了相应的支持,41,AndroidSDK目录(10),根据需要来进行了解,42,AndroidSDK提供的实例,AndroidSDK的Samples提供了丰富的实例,43,AndroidSDK提供的实例(2),SkeletonApp演示如何使用AndroidSDK提供的视图组件如EditText、Button、ImageView和菜单等ApiDemos演示了许多AndroidAPI,包括了app、content、graphic和media等通过该示例来了解AndroidAPINotePad记事本程序演示了文本的新建、编辑和删除等操作LunarLander演示了一个登陆月球的小游戏主要涉及到动画、键盘快捷键、线程的实现等,44,AndroidSDK提供的实例(3),Home演示主题类软件,实现一套新的主题界面并注册到系统主题当中如何开发主题类应用SoftKeyBoard演示软键盘与输入框事件的绑定,自动显示软键盘如何使用软键盘Snake贪吃蛇自定义视图组件的实现和控制,游戏的设计开发JetBoy具备声音支持的游戏实例演示多媒体支持下的游戏设计开发,45,Android核心开发包,android.util包含一些底层辅助类,例如特定的容器类,XML辅助工具类等android.os提供基本的操作服务,消息传递和进程间通信IPCandroid.grpics作为核心渲染包,提供图形渲染功能android.text/android.text.method/android.text.style/android.text.util提供一套丰富的文本处理工具,支持富文本,输入模式,46,Android核心开发包(2),android.database包含底层API处理数据库,方便操作数据库表和数据android.content提供各种服务访问数据在手机设备上,程序安装到手机设备和其他相关资源,以及内容提供展示动态数据android.view核心用户界面框架android.widget提供标准用户界面元素,lists(列表),buttons(按钮),layoutmanagers(布局管理器)等,是组成我们界面的基本元素,47,Android核心开发包(3),android.app提供高层应用程序模型,实现使用Avider提供方便调用系统提供的contentproviders的接口android.telepony提供API交互和手机设备的通话接口android.webikit包含一系列工作在基于Web内容的API,Android基本组件,49,Android基本组件,Android应用程序由以下部分构成ActivityBroadcastReceiverServiceContentProviderIntent/IntentFilter不是每个程序都需要上述所有组件对上述组件进行组合来进行应用程序的编写通过AndroidManifest.xml来实现具体的组件组合,50,Activity,最基本的Android模块之一提供使用者一个交互式的接口功能可以看做是应用中的一个单独屏幕每个Activity被实现为一个继承于Activity基类的单独的类Android应用程序中的Activity一般Android应用程序中都有多个ActivityActivity之间互相跳转例如通过button,51,Activity(2),Activity的管理所有的Activity在系统中的Activity栈中管理新的Activity执行后被放置到栈的顶部,状态转变为runningActivity先前的Activity仍然在栈中,但不在前台Activity生命周期Active/runningPausedStopFinish/kill,52,Service,Service服务运行在后台的一段代码长期存活,运行在自己的进程或者其他程序的的上下文中取决于自身的需要运行时不具有UI编码与其他组件的关系其他组件可以绑定到一个Service通过远程调用RPC来调用,53,Service(2),Service的生命周期通过其他应用程序组件启动、终止和控制包括其他service、activity和broadcastreceiver适合于需要定期或者持续执行不与用户交互的操作启动的Service具有比非active状态的Activity更高的优先级防止被意外的终止当Service占用了必需资源时,会被终止;在资源可用时,Service会被自动重启应用程序可以作为服务需要定时更新,但用户交互少,54,Intent/IntentFilter,Intent意图一种消息传递机制,定义为对要进行的操作的抽象描述与特定的数据一起声明执行某个动作的意图可以进行屏幕之间的切换,描述了应用程序想要做什么Intent的构成动作或者说需要进行的动作动作对应的数据,55,Intent/IntentFilter(2),Intent在Android应用程序中的作用启动Activity启动特定的Activity启动未指明的Activity处理Activity的返回值支持Android系统中任意两个应用程序组件之间的交互在系统范围内广播消息任何应用程序都可以注册广播接收器来监听和响应广播的Intent,从而能够事件来创建事件驱动的应用程序广播公布系统事件Intent启动Activity的方式显示:通过指定要加载的类隐式:通过请求对一组数据执行某个动作,56,Intent/IntentFilter(3),IntentFilter用来注册Activity、Service和BroadcastReceiver并对一个动作或一类特定数据进行处理告诉Android系统如何找到合适的处理程序IntentFilter的使用方法使用标签及其属性来指定一个组件所支持的动作、分类和数据可以使用IntentFilter作为插件和扩展Android系统对IntentFilter进行解析隐式的Intent被解析为一个单一的活动如果有多个活动可以完成对指定数据的动作,那么启动最合适的活动,57,BroadcastReceiver,Intent广播(Broadcast)事件Intent可以用作不同进程间传递数据和事件的媒介由应用程序或者Android系统本身来广播一些事件的到来监听(通过注册BroadcastReceiver)并可以获取Intent中的数据BroadcastReceiverBroadcastIn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纸盒制作工岗前操作评估考核试卷含答案
- 麻料作物栽培工常识评优考核试卷含答案
- 泥釉浆料制备输送工安全防护测试考核试卷含答案
- 温差电电池制造工成果转化能力考核试卷含答案
- 宾客行李员岗前创新意识考核试卷含答案
- 木地板制造工诚信品质模拟考核试卷含答案
- 煤间接液化分离操作工操作水平竞赛考核试卷含答案
- 怀孕不参加培训的请假条
- 2025年坦克玻璃系列合作协议书
- 2025年针织、编织制品项目发展计划
- 河南豫能控股股份有限公司及所管企业2026届校园招聘127人笔试模拟试题及答案解析
- 未来五年养殖淡水鳙鱼(胖头鱼)企业县域市场拓展与下沉战略分析研究报告
- 2026年宁夏贺兰工业园区管委会工作人员社会化公开招聘备考题库参考答案详解
- 癌痛患者心理支持策略
- 2025年12月份四川成都市第八人民医院编外招聘9人笔试参考题库及答案解析
- 25秋二上语文期末押题卷5套
- 微生物检验质控措施分析
- 达人分销合同范本
- 检修车间定置管理制度(3篇)
- 乘用车内部凸出物法规培训
- 妇科肿瘤保留生育功能治疗策略
评论
0/150
提交评论