首页 理论教育 Android系统及应用程序架构:深入探究

Android系统及应用程序架构:深入探究

时间:2023-10-17 理论教育 版权反馈
【摘要】:Android操作系统为方便用户的使用,在其任一版本发布的同时,会自带许多为方便用户使用的核心应用程序以及一些常用应用程序。值得注意的是,Android系统内所有功能均以应用程序形式展现,大都可由用户停用或者(隐式)卸载。Android系统对Linux操作系统的使用还包括了显示、音频等驱动程序部分。它主要是为Android应用程序提供运行环

Android系统及应用程序架构:深入探究

(一)Android平台简介

Android操作系统是谷歌公司于2007年推出的具有开源特性的手机操作系统,它基于Linux平台开发而来,而Android的意思是“机器人”。Android系统采用了分层式的架构,它包括底层基于Linux的操作系统、中间件以及核心应用程序,它的核心包括安全性、内存的管理、进程的管理和网络协议栈等都依赖于底层Linux。Android应用程序代码大部分是基于Java语言编写而成,同时也支持一些其他语言。Android平台技术由开放手机联盟(Open Handset Alliance)的全球性联盟组织推广,该联盟支持谷歌公司发布的Android手机操作系统或者相关的应用软件

Android操作系统类似于其他的操作系统,自上而下可以分为四层,具体而言第一层是应用程序层(Application);第二层是应用程序框架层(Application Framework);第三层是系统库和Android运行时环境(Libraries&Android Runtime);第四层是(Linux)操作系统内核层(Linux Kernel)。其中Android运行环境主要是指Dalvik虚拟机,应用程序、应用程序框架以及Dalvik的核心库均运行Dalvik虚拟机之上,Android应用程序的大部分代码是由Java语言编写而成。

1.应用程序层

应用程序层是Android系统层次的顶层,是普通用户直接接触到的层,同时也是绝大多数用户能接触到的唯一的一层,它直接决定了设备的使用体验。

Android操作系统为方便用户的使用,在其任一版本发布的同时,会自带许多为方便用户使用的核心应用程序以及一些常用应用程序。其中,语音应用、通信录应用、短信应用、相机以及话机设置应用等作为手机必备的功能应用。包括邮件、日历日程应用、网页浏览器、地图导航等应用程序作为日常必备应用程序提供给用户。值得注意的是,Android系统内所有功能均以应用程序形式展现,大都可由用户停用或者(隐式)卸载。

Android系统内的所有应用程序均运行在一个称为DVM(Dalvik Virtual Machine)的虚拟机上。通常情况下开发者们根据自身需要而设计开发的Android应用程序通过Java语言实现,而从地位上来说它们与那些系统自带核心应用是基本一致的。但应用程序直接与用户交互,其安全风险不言而喻。因而开发人员需要对应用程序安全性有一个基本的理解,包括采用何种方式保护敏感数据,如何加强代码层面的强健性,如何加强应用程序的访问权限等。

2.应用框架层

应用框架层是开发Android应用的基础,大部分开发人员是在此层上开发相关应用。这一层的主要功能是为Android开发者提供开发过程所需的各种API。应用程序框架定义包括了任意一个应用程序运行所必备的全部功能组件,开发者可以访问并使用其需要使用的API框架。Android平台的这种架构设计简化了组件的重用,使得开发工作得以简化。

Android平台在应用框架中虽然已经提供了许多可以供应用程序直接调用的组件,但开发者们也可以自行设计需要使用的组件。一般情况下,开发者将所开发的新组件放到应用框架里面,而其他应用程序在遵循框架安全性限制的前提都能够重用之前所发布的新组件,这样就为Android应用程序的开发提供了很大的便捷性。Android应用程序框架主要由Java语言编写而成,因此Java语言是Android开发者进行开发的基础。

3.系统库和Android运行时环境

系统库大多为开源库,主要服务于Android应用程序组件,它的功能通过组件间接提供给程序开发者。而主要的类库包括字体库FreeType、C库、多媒体框架、用于运行网页浏览器的WebKit、服务于游戏开发的OpenGL、轻量级数据库操作系统SQLite、字体库FreeType等。

Android运行时环境包括核心库和DVM两部分,它的主要功能是有效优化程序运行过程。核心库的内容由Java语言编写而成,可分为两大部分,第一部分主要是很多JavaSE包的子类中的功能函数;第二部分是Android的核心库(Android特有的库文件),如基础数据结构、I/O、工具、数据库、网络等库。DVM在JVM(Java Virtual Machine,Java虚拟机)之上基于寄存器开发而成,它的重要作用是对生命周期、堆栈线程、安全和异常等进行管理,同时负责垃圾的回收。然而DVM与JVM又有所区别,如Dalvik虚拟机是基于寄存器开发,Java虚拟机则是基于栈开发。Dalvik虚拟机运行的是.dex文件,负责解释并执行Dalvik字节码,而Java虚拟机则运行.class文件,负责解释执行Java字节码。

4.Linux内核层

Linux内核层处于整个Android系统架构层次的最底端,Android系统以Linux2.6作为操作系统核心。谷歌公司针对Linux2.6的内核进行修改,并最终根据自身所需,提供了一系列适用于手机操作系统的核心系统服务,如安全性、进程管理、内存管理、网络协议栈和驱动模型。此外,Linux内核可以视作一个抽象层,桥接了软硬件,可以在隐藏具体硬件特性的同时为上一层提供软件层面的标准服务。Android系统对Linux操作系统的使用还包括了显示、音频等驱动程序部分。另外,Android系统还对此部分做了部分修改,主要涉及两部分:Binder(IPC)和电源管理。

5.层次间的关系

在Android各层次之间,下层为上层提供服务,上层利用下层的服务,Android的这种架构更加适用于手机终端,同时使得Android系统具有一定的灵活性、扩充性和稳定性。对于每一个应用程序,Android系统都为它们分配独立的DVM实例,它们各自运行在独立的进程中,这样保证了应用程序在运行过程中不会受到干扰和破坏。(www.xing528.com)

(二)Android应用程序设计理念

Android运行时环境主要是指DVM技术,DVM是专门基于Android平台的虚拟机。它主要是为Android应用程序提供运行环境,其上基本运行的是java语言编写的应用程序,是Android平台极为重要的组成部分。Dalvik虚拟机运行.dex格式的应用程序,其中.dex文件是通过dx工具将程序中的多个.class文件合并后生成。.dex文件在结构上更加简洁紧凑,不需要跨进程即可查找相关的定位信息,效率更高。

一般的Java应用程序只能在一个进程中运行,这明显不能满足Android最初的设计理念。因此,DVM在Linux进程管理的基础上针对移动终端做出修改,移动终端操作系统理应在任何时候在还未完成目标动作时,可以暂停正在进行的任何活动,转换到通话模式等,而当用户在通话结束后返回先前界面或活动时,可以完成先前的工作。Android之前出现的移动操作系统虽然也可以并发执行多个程序,然而此时却占用了过多的系统资源,对于如手机的移动终端,其系统资源相对来说毕竟还是很少的。此外,除了系统资源不足的问题,如果内存管理不当导致已关闭或不再使用的程序依然占用其不需要的资源,必然会导致运行速度缓慢,从而可能致使整个系统的崩溃。为了解决系统资源尤其是内存资源的分配和管理问题,Android提供了一种新的机制—生命周期。

Android系统出于减轻开发者负担的目的,应用程序不必自己管理其生命周期,而将这一工作交给系统进行统一管理。一般情况下,任意一个Android应用程序可以视为一个进程,如果系统内存行将耗尽,系统会根据各个进程的级别高低自行进行管理。无论是应用程序的用户还是开发人员,不能也无需确定其被回收时间。

Android系统的应用程序,在一定程度上可以说只是相关组件的集合体,是它们的上下文描述。可以说,同一个应用程序的各个组件也是相互独立的,系统并不会直接将作为组件集合体的应用程序建立。通常,只有在这些组件需要运行的时候,系统才真正生成对应的应用程序对象。通常的流程是,一个组件需要运行,Activity Manager Service在获知此消息后为包含此组件的应用程序建立一个对应的进程。每一个组件作为独立的个体可以自由地交互而不是仅仅局限于单个应用之中,组件可以主动请求服务,而不必考虑其处于哪个应用程序之中,以上可视作Android应用程序的设计开发理念。

(三)Android应用程序组件模型

在一个Android应用中,可能包含四种独立的组件,它们之间相互协调,相互调用,组成一个完整的应用程序。相同或不同的组件与组件之间的通信,基本经由起纽带作用的Intent协同实现。Intent的作用是描述应用中的组件每次操作的动作、其涉及的数据以及附加数据,系统根据其中描述的内容,与相关组件匹配,最终通过Intent的调用实现组件的调用。综上所述,Intent可以视作一个桥梁或者媒介,它负责提供组件间与调用有关的信息,实现了调用者与被调用者之间的解耦。Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),Broadcast Receiver(广播接收器)。四者与Intent之间的关系密不可分。

1.Activity

Android的Activity实际上可以说就是一个屏幕界面,它基本上以全屏显示的窗体、非全屏显示的对话框等形态直观地显现给使用者,应用程序通过这种可视化的界面与使用者进行交互。通常情况下,任何一个Android应用按照其功能的需要都具有不同的使用阶段,而这些互相区别的每一个阶段都对应有自身的Activity,因而一般来说任何一个应用都含有多个Activity。

从启动至毁灭的整个过程称为Activity的生命周期,按照生命周期以及用户角度和可视化角度,Activity大体上可分为三种状态:活动状态、暂停状态以及停止状态。用户主要与处于活动状态的Activity进行交互,此状态的Activity位于Activity栈的顶层,其特征从可视化角度来说是完全可见。如果一个Activity的界面被其他界面部分遮挡,则此Activity处于暂停状态,其特征从可视化角度来说是不完全可见,而用户无法与处于此状态的Activity进行交互。而当一个Activity被别的界面完全遮挡,那么此Activity处于停止状态,从可视化角度来说其是完全不可见的,用户自然不可能与之交互。以上三种状态由Android提供的Activity堆栈进行管理,也就无须普通应用开发者过多关注。

2.Service

所有的Service都继承自Service基类。相较于Activity,Service拥有的生命周期很长,开发者使用Service基本有两个用途:后台运行和跨进程访问。相较于Activity,Service~直运行在后台且并不存在显示界面,这也使得用户一般无法与之交互。正如Service的直译名“服务”,开发者通常使用它来为用户提供一些不需要进行交互的工作,如在网络上传输数据等。相较于Activity而言,Service的生命周期比较简单,按照其使用流程可以大体上分为以下三个阶段:创建服务、开始服务以及销毁服务。按照其使用方式,通常可以分为以下三种:第一种由startService方法调用,这种服务的主要作用是进行与外界不通信的后台工作,中止则调用stopService方法;第二种由bindService方法调用,这种服务起到与外界通信的作用,中止则调用ubindService方法;第三种则同时使用startService方法以及bindService方法调用,这种服务作用结合了前面两种服务的特点,中止则需要同时调用stopService方法以及ubindService方法。

3.Content Provider

Content Provider提供了一种特殊的可供其他应用使用的数据类型以及获取和操作这些数据一整套标准。通常情况下,这些数据保存在文件系统或者SQLite数据库之中,或者以其他有意义的形式存储。内容提供者继承于Content Provider基类,提供实现了一套标准的允许其他用户检索和储存数据的方法,从而使得数据得以共享。但是,应用程序并不可以直接使用这些方法来获取使用相关数据,它们必须通过使用Content Provider的实例来调用它的方法。Content Resolver可以与任何内容提供者交流,它们之间的合作可以管理进程之间的通信和数据共享。

4.Broadcast Receiver

Broadcast Receiver的作用是异步接收广播,本质上是用来获取广播中的Intent内容。需要注意的是,只要经过授权,处于不同应用程序中的不同Broadcast Receiver可以接收同一个广播。Broadcast Receiver是Android系统用来响应外部事件的组件,这些外部事件包括了系统自身事件,如手机充电与否,也包括了其他程序主动发出的事件。Android广播这一处理机制与通常的事件处理机制相仿,但不同之处在于,一般的事件处理只是组件级别的,而前者是上升到系统级别的。Broadcast Receiver作为广播接收器不需要也不能实现类似Activity的显示界面或者其他复杂的功能,通常情况下,它只负责接收某个广播,然后负责启动相关Activity或Service,也可以通过Notification Mananger提示使用者等。如果需要使用Broadcast Receiver,则需要进行相应的注册工作,一般情况下,可以在Android Manifest.xml内进行静态注册,或者根据需要在应用程序相关代码调用Context.register Receiver方法进行动态注册。一个Broadcast Receiver对象只有在调用其onReceive(Context, lntent)方法时才进行工作,由于一般情况下Broadcast Receiver的工作只是接受广播,它的生命周期非常短,因而一旦在其中进行的工作时间过长(一般不能超过10 s)将会导致系统报错。onReceiveO方法执行结束后后,Broadcast Receiver便完成了任务,此时它就被系统销毁。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈