1、Android发展历程2、系统框架3、启动流程4、应用程序5、IPC通信机制6、AndroidGDI基本框架7、更多内容android系统简介Android发展历程Android发展历程Android发展历程Android发展历程Android发展历程Android发展历程Android系统框架android系统简介android系统结构•第4层•JAVA应用层•第3层•JAVA框架层•第2层•C框架和JAVA运行环境•第1层•Linux操作系统–Android的软件结构的几个层次:–1.操作系统层(Linux,相关驱动)–2.库(Libraries)和运行环境(RunTime)–3.应用程序框架(ApplicationFramework)–4.应用程序(Application)–操作系统层使用C语言编写,运行于内核空间。–底层库和JAVA虚拟机使用C语言编写,运行于用户空间。–JAVA框架和JAVA应用程序使用JAVA语言编写,运行于用户空间android的系统结构Android的第1层次由C语言实现,第2层次由C和/C++实现,第3、4层次主要由Java代码实现。第1层次和第2层次之间,从Linux操作系统的角度来来看,是内核空间与用户空间的分界线,第1层次运行于内核空间,第2、3、4层次运行于用户空间。第2层次和第3层次之间,是本地代码层和Java代码层的接口。第3层次和第4层次之间,是Android的系统API的接口,对于Android应用程序的开发,第3层次以下的内容是不可见的,仅考虑系统API即可。android的系统结构Android启动android系统简介android系统的启动•Android系统的启动流程为:BootLoader启动(标准)Linux内核启动(标准)内核加载根文件系统init进程启动运行init.rc脚本加载system和data文件系统启动各种服务android系统的启动•被init以Deamon形式启动的各个进程:/sbin/ueventd:动态设备管理/system/bin/sh:Shell/sbin/adbd:ADB(默认禁止)/system/bin/servicemanager:本地服务核心管理/system/bin/vold:热插拔文件系统Daemon/system/bin/netd:网络Daemon/system/bin/debuggerd:调试Daemon/system/bin/rild:电话Daemonzygote:JAVA部分的入口/system/bin/mediaserver:多媒体Daemonandroid系统的启动zygote的启动•在init.rc中配置zygote启动参数:•servicezygote/system/bin/app_process-Xzygote/system/bin•--zygote--start-system-server•Linuxservice的语法:•serviceservice_name可执行程序可执行程序所需的参数列表•/system/bin/app_process,参数一共包含四个:-Xzygote,该参数将作为虚拟机启动时所需要的参数,是在AndroidRuntime.cpp类的startVm()函数中调用JNI_CreateJavaVM()时被使用的。/system/bin,代表虚拟机程序所在目录,因为app_process完全可以不和虚拟机在同一个目录,而在app_process内部的AndroidRuntime类内部需要知道虚拟机所在的目录。--zygote,指明以ZygoteInit类作为虚拟机执行的入口,如果没有--zygote参数,则需要明确指定需要执行的类名。--start-system-server,仅在指定--zygote参数时才有效,告知ZygoteInit启动完毕后孵化出第一个进程SystemServer。zygote的启动类com.android.internal.os.ZygoteInit完成初始化。ZygoteInit.java会完成一次分裂,分裂出来的子进程继续初始化Java层的框架,启动Android系统的服务。system_init()在libsystem_server.so提供实现。SystemServer:启动后将启动系统的各个子服务,各个子服务基本上以线程的方式运行。至此,Android的系统启动基本完成zygote的启动Android应用程序android系统简介Android应用相关的文件类型Java文件-----应用程序源文件android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的)android的应用必须使用java来开发。Class文件------Java编译后的目标文件android平台上class文件不能直接在android上运行。android的Dalvik不支持class文件的运行android的class文件只是编译过程中的中间目标文件,最终链接成dex文件。Dex文件-----Android平台上的可执行文件Dalvik虚拟机执行的并非Java字节码,而是另一种字节码:dex格式的字节码。在编译Java代码之后,通过Android平台上的工具将Java字节码转换成Dex字节码。DalvikVM针对手机程式/CPU做过最佳化,可以同时执行许多VM而不会占用太多资源APK文件-------Android上的安装文件APK是Android安装应用程序包的扩展名。一个APK包中包含了与该Android应用程序相关的所有文件:AndroidManifest.xml应用程序代码(.dex文件)资源文件(包括UI的图片资源和程序需要使用的raw资源)android提供的主要JAVA包android.app提供高层的程序模型、提供基本的运行环境android.content包含各种的对设备上的数据进行访问和发布的类android.database通过内容提供者浏览和操作数据库android.graphics底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.android.location定位和相关服务的类android.media提供一些类管理多种音频、视频的媒体接口android.net提供网络访问的类,超过通常的java.net.*接口android.os提供了系统服务、消息传输、IPC机制android.opengl提供OpenGL的工具android.provider提供类访问Android的内容提供者android.telephony提供与拨打电话相关的API交互android.view提供基础的用户界面接口框架android.util涉及工具性的方法,例如时间日期的操作android.webkit默认浏览器操作接口android.widget包含各种UI元素(大部分是可见的)在应用程序的屏幕中使用Android的应用程序(.apk)Android应用程序运行Dalvik虚拟机Dalvik是Google公司自己设计用于Android平台的Java虚拟机。它可以支持已转换为.dex(即DalvikExecutable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,可以减少整体文件尺寸,提高I/o操作的类查找速度所以适合内存和处理器速度有限的系统。1)每个应用程序都运行在它自己的Linux空间。在需要执行该应用程序时Android将启动该进程,当不再需要该应用程序,并且系统资源分配不够时,则系统终止该进程。2)每个应用程序都有自己的(DVM),所以任一应用程序的代码与其他应用程序的代码是相互隔离的。3)默认情况下,每个应用程序都给分配一个唯一的Linux用户ID。所以应用程序的文件只能对该应用程序可见。每个应用程序都拥有一个独立的DVM,而每个DVM在Linux中又是一个进程,所以说DVM进程和Linux进程可以说是一个概念。Dalvik虚拟机一个应用,一个虚拟机实例,一个进程Android应用程序组件Android应用程序是由以下四种组件构造而成的:ActivityServiceContentProviderBroadcastIntentRecevier这些组件依附于Android应用程序中。在Android中,在这些组件建立起来后,需要运行时,开始建立应用程序对象。Android应用程序的运行Android是基于Linux系统建立起来的,不管Activity,Service等组件如何设计和运行,必须要依附在Linux的进程上,建立消息循环,组件才能够真正的运作。AndroidSDK对android:process的解释:Thenameofaprocesswhereallcomponentsoftheapplicationshouldrun.Eachcomponentcanoverridethisdefaultbysettingitsownprocessattribute.Bydefault,Androidcreatesaprocessforanapplicationwhenthefirstofitscomponentsneedstorun.Allcomponentsthenruninthatprocess.Thenameofthedefaultprocessmatchesthepackagenamesetbytheelement.Bysettingthisattributetoaprocessnamethat'ssharedwithanotherapplication,youcanarrangeforcomponentsofbothapplicationstoruninthesameprocess—butonlyifthetwoapplicationsalsoshareauserIDandbesignedwiththesamecertificate.Android应用程序运行默认状态下,在应用程序的第一个组件需要运行时,Android将会为应用程序建立一个进程。例如:在建立Actvitiy时,如果没有Application对象,系统将调用makeApplication建立一个Application对象,实例化Application,建立一个应用程序上下文(Context)进行资源,package等信息的管理。Android的进程的名字有android:process这个属性所指定,缺省的是应用程序包的名字。Android的应用进程建立后,该应用的所有组件都将运行在该进程中。组件将通过ClassLoader从Package中获取到应用程序的信息ActivityAndroidSDK对Activity的定义:Anactivityisasingle,focusedthingthattheusercando.Almostallactivitiesinteractwiththeuser,sotheActivityclasstakescareofcreatingawindowforyouinwhichyoucanplaceyourUI.1.Activity是一个用来与用户交互的组件,涉及到UI(GUI)2.Activity包含了一个窗口,所以Activity的管理和窗口管理之间有一定的联系,状态管理?顾名思义:Android应用程序活动过程中的某一个场景的描述Activity状态Active/Runing一个新Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。Paused当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但