湖南大学毕业设计(论文) 第 7 页
2.3 Android平台体系架构
Android平台采用了分层的架构,从架构图看分为四层,从上层到下层分别是应用程序层、应用程序框架层、系统运行库层以及Linux内核层,架构图如图2.1所示。
图2.1 Android平台架构
1.应用程序层
Android应用层由运行在Android设备上的所有应用共同构成,它不仅包括随Android系统一起预装在移动设备上的通话、短信、联系人等系统应用,还包括其他后续安装到设备中的第三方应用。
Android的应用都是基于Java语言开发的,但在部分应用中需要使用开源C/C++类库,或者进行图形处理和运算。通过Java来实现会存在执行效率低和移植成本高等问题。因此,在Android开发中可使用C/C++来实现底层模块,并添加相应接口与上层Java交互,最后利用Android提供的交叉编译工具生成类库并添加到应用中[3]。
2.应用程序框架层
湖南大学毕业设计(论文) 第 8 页
框架层是由多个系统服务共同组成的,包括窗口管理服务、组件管理服务、电源管理服务、地理信息服务、通话管理服务等[8]。所有服务都寄宿在系统的核心进程中,运行时每个服务占据独立的线程,彼此通过进程间的通信机制发送消息和传输数据[8]。
从系统设计的角度来看,框架层是Android系统中最核心的部分,它进行着全局统筹,参与到应用层的每一次操作中。每一次构造窗口、处理用户交互事件、绘制界面、获得当前地理信息、了解设备信息等操作,都是在各个系统服务的支持下实现的。而对于开发者而言,框架层最直观的体现就是SDK,它通过一系列的Java功能模块,来实现应用所需的功能。SDK的设计决定了上层应用的开发模式、开发效率及能够实现的功能范畴。
3.系统运行库层
系统运行库包括核心类库和Android运行库。
核心类库由一系列的二进制动态库共同构成,通常使用C/C++进行开发,核心类库不能够独立运行于线程中,需要系统服务加载其到进程空间,再通过类库提供的JNI接口进行调用[3]。核心类库的来源主要有两种,一种是系统原生类库,以便Android使用C/C++来实现一些性能关键模块来提高框架层的执行效率,如:资源文件管理模块、基础算法库等[4]。而另一种则是第三方类库,大部分是移植优秀开源项目,它们保障了Android能够提供丰富功能,如:Android 的多媒体处理,依赖于开源项目OpenCORE的支持;浏览器控件的核心实现,是从Webkit移植而来;而数据库功能,则是得益于SQLite[4]。
Android运行库由Java核心类库和Java虚拟机Dalvik共同构成,来实现Java程序在运行阶段的二次编译。Java核心类库涵盖了Android框架层和应用层所要用到的基础Java库,包括Java对象库、文件管理库、网络通信库等。Dalvik 是为Android量身打造的Java虚拟机,采取了基于寄存器的虚拟机架构设计,负责动态解析执行应用、分配空间、管理对象生命周期等工作,Dalvik 执行效率很高,更能够发挥高端硬件的能力。
4.Linux内核层
Linux内核的优势在于进程管理、大内存管理、共享库支持、基于权限的安
湖南大学毕业设计(论文) 第 9 页
全模型、代码开源、统一的驱动模型等。Linux具有强大的可移植性,Linux可以运行在各式各样的芯片架构和硬件环境下,而依托于它的Android系统,也便有了强大的可移植性。同时,Linux 内核也作为硬件和软件栈之间的抽象层,像一座桥梁将Android的上层实现与底层硬件连接起来,使它们可以不必直接耦合,因此降低了移植的难度。 2.4 Android应用程序组成
Android应用程序一般主要由以下四个部分组成:Activity、Broadcast Receiver、Service和Content Provider[4]。
每个android应用程序都包含一个必不可少的文件AndroidManifest.xml,每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置,而Broadcast Receive的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建方式注册至系统。这四大组件之间的关系如图2.2所示。
图2.2 Android组件关系
下面对每个组件作简要介绍: 1.Activity组件
Activity是Android应用程序最基础的组件,它代表手机屏幕的一屏,是用户与应用程序的交互接口。Activity相当于一个UI容器,开发者可以在Activity中添加一些View,并对这些View做一些事件处理,比如通过对某些控件如
湖南大学毕业设计(论文) 第 10 页
TextView,Button的操作,实现Activity之间的跳转。
一个应用程序中的多个Activity是通过栈来管理的,多个 Activity遵循着后进先出的原则通过压栈和弹栈来实现界面的跳转,栈顶的activity是当前屏幕显示的、集中处理用户动作的Activity。当一个新的activity启动时,这个新的activity将压入栈中,成为正在运行中的 activity,前一个activity保留在栈中;当用户使用后退按钮时,当前的activity将从栈中弹出,而前面的那个activity恢复成运行中状态。
在栈管理中,Activity有四种状态,这四种状态共同构成了Activity的生命周期,如图2.3所示。
图2.3 Activity生命周期
在Activity的整个生命周期中,当一个Activity被启动时,首先是调用onCreate()方法设置初始化界面全部信息,如界面的views、buttons和分配的引用变量等;初始化完成后会调用onStart()方法,此时用户可看到界面;当用户与界面进行交互时就会调用onResume()方法;而调用onPause()方法时,此Activity
湖南大学毕业设计(论文) 第 11 页
是可见但不可交互的,即这个Activity依然保持着所有的连接状态,但系统会停止部分消耗CPU的事情。当被其他Activity覆盖时调用onStop()方法,该Activity不可见。在后面的这两种情况下都会调用onSaveInstanceState()方法来暂时保存被覆盖的Activity的状态,在这些被覆盖的Activity重新回到界面上的时候会恢复这些状态;调用onDestroy()方法后所有资源释放,Activity从栈中移除。
2.Broadcast Receiver组件
应用程序可以使用Broadcast Receiver对外部事件进行过滤,只对感兴趣的外部事件进行接收并做出响应。Broadcast Receiver没有用户界面,它是通过启动activity、使用NotificationManager或者在状态栏显示一个图标来通知用户某些事情的发生,比如用闪动背灯和震动等方式通知用户电池电量低、电话呼入、数据网络可用等。
所有Broadcast Receiver均继承自BroadcastReceiver基类,一个应用程序可以拥有任意数量的广播接收器。注册广播事件有两种方式:一种是在AndroidManifest.xml文件中定义,称为静态注册;另一种是在程序中使用Context.registerReceiver注册,称为动态注册。广播事件的发送是通过Context.sendBroadcast来完成的,当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。
3.Service组件
Service是在后台运行不与用户交互的,一般处理比较耗时以及长时间运行的操作,如下载、网络获取和播放音乐等。Service不是一个独立的进程,它与应用程序运行在同一个进程当中。要使用Service,首先要在AndroidManifast.xml配置清单文件中节点里对服务进行配置,再通过传递一个Intent对象至Context.startService()或Context.bindService()启动服务。
4.Content Provider组件
ContentProvider提供了一种通用的接口机制,实现了不同存储方式和类型的数据共享。当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。ContentProvider是基于权限控制的,为了便于管理和访问,每个ContentProvider都拥有一个公共的Uri代表着要操作
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于Android平台轨迹追踪的应用设计与实现 毕设论文 - 图文(3)在线全文阅读。
相关推荐: