首页 > 知识点讲解
       Android平台技术及其结构
知识路径: > 电子商务系统程序设计基础 > 电子商务平台开发基础 > 移动端开发平台技术及其结构 > 移动端开发平台技术及其结构 > 
被考次数:1次     被考频率:低频率     总体答错率:31%     知识难度系数:     
相关知识点:4个      
               Android平台简介
               Android是一个以Linux为基础的开源移动设备操作系统,主要用于智能手机和平板电脑,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中。
               Android的系统架构
               基于Linux内核操作系统,Android系统对Linux内核进行了加强。其系统架构如下图所示,采用了分层架构思想,从上到下分为4层,分别为Application(应用层)、Application Framework(应用框架层)、Libraries and Android Runtime(系统库及Android运行时,系统运行库层)和Linux Kernel(Linux内核层),各层采用Software Stack(软件栈)的方式进行构建。
               
               Android系统架构
               (1)Android应用层。Android应用层提供的服务即我们常说的应用,它是与用户直接交互的。所有的应用程序(包括原生和第三方)都在应用层上进行构建,如系统自带的日历、通话、短信、浏览器等以及在Android应用商店中下载的游戏、音乐软件等;应用层运行在Android运行时内,并且使用了应用程序框架的类和服务。
               (2)Android应用框架层。Android应用框架层提供了开发Android应用程序所需的一系列类库,通常是系统API接口,使开发人员可以方便、快速地构建应用整体框架,其具体的模块内容及功能如下:
               ①Activity Manager(活动管理器)。管理各个应用程序活动窗口并为窗口提供交互的接口。
               ②Window Manager(窗口管理器)。管理所有开启的窗口程序。
               ③Content Provider(内容提供者)。提供应用内或应用程序间数据共享功能。
               ④View System(视图)。创建应用程序基本视图组件,如ListView、TextView、WebView等控件。
               ⑤Notification Manager(通知管理器)。用户可以自定义状态栏中的提示信息。
               ⑥Package Manager(包管理器)。应用程序安装进手机后,以包名作为文件夹名进行存储,此API提供诸如应用程序的安装与卸载功能以及提示相关的权限信息。
               ⑦Resource Manager(资源管理器)。提供图片、音视频等非代码资源。
               ⑧Location Manager(位置管理器)。提供位置信息服务。
               ⑨Telephony Manager(电话管理器)。管理所有移动设备功能。
               ⑩XMPP服务。Google提供的后台推送服务。
               (3)Android系统运行库层。Android系统运行时库层包含两部分内容,一个是系统库,一个是Android运行时。
               系统库提供了系统功能通过Android应用程序框架层为开发者提供服务,其类库的主要内容包含各种C/C++核心库(如Libc和SSL)、支持音频视频的多媒体库、用于本地数据库支持的SQLite、2D/3D图形处理引擎、外观管理器、数据传输服务(WebKit、SSL)等。另外,Android NDK(Android Native Development Kit,Android原生库)也为开发者提供了直接使用Android系统资源的能力。
               Android运行时包含核心库与Dalvik虚拟机两部分:
               ①核心库提供了Java SE API的绝大多数功能,并提供Android的核心API,如android.os、android.net、android.util、android.meida等。
               ②Dalvik虚拟机是基于Apache的Java虚拟机,被改进以适应低内存、低处理速度的移动设备环境,负责运行Android应用程序,提供实现进程隔离与线程调试管理、安全和异常管理、垃圾回收等重要功能。
               (4)Android Linux内核层。Android Linux内核层作为系统架构的最底层借助Linux内核服务实现硬件设备驱动,从而为上层提供诸如进程与内存管理、网络协议栈、电源管理以及驱动程序等功能,同时Linux内核也是硬件与软件之间的抽象层(Hardware Abstract Layer,HAL),它是对硬件设备具体实现的抽象,这样程序开发人员就无须考虑系统底部的实现细节,提高了开发效率。
               Android的应用程序组件
               Android应用程序是由一些松散的组件构成,每个应用程序中都会包含一个配置文件AndroidManifest.xml,主要描述应用程序中所用到的各组件及其相互关系,还包括硬件要求、权限声明等。Android应用程序各组件之间可以调用相互独立的基本功能模块,其中根据功能的不同,可以划分为四类不同的组件,即:
               ①Activity(活动)。用于表现功能。
               ②Service(服务)。后台运行服务,不提供界面呈现。
               ③BroadcastReceiver(广播接收器)。用于接收广播。
               ④ContentProvider(内容提供者)。支持在多个应用中存储和读取数据,相当于数据库。
               各组件之间是通过Intent来实现消息传递,Intent可以理解为不同组件通信的媒介或者信使。Intent可以启动或停止一个Activity或Service,还可以发起一个广播Broadcast,Android系统中大量使用了Intent,在实际的应用程序开发中也会频繁使用Intent传递信息。
               (1)Activity(活动)。是Android应用程序核心组件中最基本的一种,也是最常见的组件,是用户和应用程序交互的窗口。通常一个Android应用程序由一个或多个Activity组成,多个Activity之间可以进行相互跳转,例如按下一个Button按钮后,可能会跳转到其他的Activity。与Web网页跳转不同的是,Activity之间的跳转可以有返回值,例如从Activity A跳转到Activity B,那么当Activity B运行结束的时候,有可能会给Activity A一个返回值,这样做在很多时候是非常方便。虽然Android应用程序有多个Activity组成,但是其中却只有一个主Activity。
               (2)Service(服务)。是一种类似Activity但没有用户界面的组件,运行在后台,相当于操作系统中的一个服务,并且可以和其他组件进行交互。Service也是一种程序,是没有界面的长生命周期的代码,它可以运行很长时间,例如打开一个音乐播放器的程序,这个时候若想上网,再打开一个Android浏览器,歌曲播放并没有停止,而是在后台继续播放,就是由播放音乐的Service进行控制。
               (3)BroadcastReceiver(广播接收器)。是一种全局监听器,用来接收来自系统或其他应用程序的广播。并作出回应,在Android系统中,当有特定的事件发生时就会产生相应的广播,并通过NotificationManager来通知用户有事件发生。
               (4)ContentProvider(内容提供者)。主要是实现在不同应用程序之间数据的共享与交换,使得其他应用可以对自身的数据进行增、删、改、查操作(通常结合SQLite使用)。由于Android中的文件、数据库在系统内都是私有的,仅允许被特定的应用程序直接使用,所以ContentProvider类实现了一组标准方法的接口,从而能让其他的应用程序读取或保存ContentProvider提供的各类数据。Android系统使用了许多ContentProvider,例如:联系人资料、通话记录、短信、相册等,一般这些数据都存放于不同的数据库中。
               Android开发框架
               Android开发的常用框架分别为MVC(Model-View-Controller)框架、MVP(Model-View-Presenter)框架和MVVM(Model-View-ViewModel)框架,目前Google主推MVVM开发框架模式。MVC前文已有介绍,在此主要介绍MVP和MVVM框架。
               (1)MVP(Model-View-Presenter)。MVP模式是目前Android系统非常流行的框架,是从MVC模式演变过来的,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。但是MVP与MVC有着一个重大的区别,如下图所示:在MVP中View并不直接使用Model,二者完全分离以减少耦合,它们之间的通信是通过Presenter(MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。MVP大大降低了耦合度(Activity不再进行复杂的操作),层级更明显,相对MVC来说MVP更加适用于Android应用的开发。
               
               MVC和MVP框架
               .Model(模型):依然是实体模型(作用与MVC相同)。
               .View(视图):在对应的Activity和XML文件中,负责View的绘制以及与用户的交互。
               .Presenter(交互器/表示器):负责完成View与Model间的交互和业务逻辑。
               MVP核心是过一个抽象的View接口(IView)将Presenter与View层进行解耦。Persenter持有该View接口,对该接口进行操作,而不是直接操作View层。这样就可以把视图操作和业务逻辑解耦,从而使得Activity成为真正的View层。
               虽然MVP使得Android开发变得更简单,但是也存在以下弊端:
               ①Presenter层与View层是通过接口进行交互的,接口粒度不好控制。粒度太小,就会存在大量接口的情况,使代码太过碎版化;粒度太大,解耦效果不好。同时对于界面UI的输入和数据的变化,需要手动调用View层或Presenter层相关的接口,相对来说缺乏自动性、监听性。
               ②MVP是以界面UI和事件为驱动的传统模型,更新UI都需要保证能获取到控件的引用,同时更新UI的时候还要考虑当前是否是UI线程,也要考虑Activity的生命周期。而且数据都是被动地通过UI控件做展示,但是由于数据的时变性,因此更希望数据能转被动为主动,数据能更有活性,由数据来驱动UI。
               ③View层与Presenter层还是有一定的耦合度。一旦View层某个UI元素更改,那么对应的接口就必须得改,数据如何映射到UI上、事件监听接口这些都需要转变。同时,复杂的逻辑业务处理也可能会导致Presenter层代码变得异常臃肿。
               (2)MVVM(Model-View-ViewModel)。为了解决MPV框架结构的弊端,MVVM框架利用数据绑定(Data Binding)、依赖属性(Dependency Property)、命令(Command)、路由事件(Routed Event)等新特性打造了一个更加灵活高效的架构。Google于2016年正式推出MVVM正式库,目前的Android Studio能够很好的支持在MVVM框架下开发应用程序。
               作为MVP的升级版,MVVM将Presenter改名为ViewModel(视图模型)。如下图所示,MVVM的核心思想是实现View和Model的双向绑定,当View有用户输入后,ViewModel通知Model更新数据,同理Model数据更新后,ViewModel通知View更新。
               
               MVVM框架
               .Model(模型):和MVP相同,基本就是实体模型(Bean),包括Retrofit的Service。ViewModel可以根据Model获取一个Bean的Observable(RxJava),然后做一些数据转换操作和映射到ViewModel中的一些字段,最后把这些字段绑定到View层上。
               .View(视图):View层实现和界面UI相关的工作,开发人员只在XML和Activity或Fragment写View层的代码。View层不做和业务相关的事,Activity不写和业务逻辑相关代码,也不需要根据业务逻辑来更新UI的代码,而更新界面UI通过Binding实现,在ViewModel里面更新绑定的数据源即可,Activity要做的事就是初始化一些控件。Activity可以更新UI,但是更新的UI必须和业务逻辑和数据是没有关系的,只是单纯的根据点击或者滑动等事件更新UI(如根据滑动颜色渐变、根据点击隐藏等单纯UI逻辑),Activity(View层)只是处理UI本身的事件,简单地说:View层不做任何业务逻辑、不涉及操作数据、不处理数据、UI和数据严格分开。
               .ViewModel(视图模型):ViewModel层做的事情刚好和View层相反,它只做和业务逻辑和业务数据相关的事,不做任何和界面UI、控件相关的事,ViewModel层不会持有任何控件的引用,不会在ViewModel中通过UI控件的引用去更新UI。ViewModel专注于业务的逻辑处理,操作也都是对数据进行操作,数据源绑定在相应的控件上会自动去更改UI,开发者不需要关心更新UI。
               MVVM的主要优点包括:
               ①数据驱动。在常规的开发模式中,数据变化需要更新界面UI的时候,需要先获取UI控件的引用,然后再更新UI。在MVVM中,这些都是通过数据驱动来自动完成,数据变化后会自动更新UI,UI的改变也能自动反馈到数据层,数据成为主导因素。这样MVVM在业务逻辑处理中只要关心数据。对于版本迭代中频繁的UI改动,更新或新增一套View即可。
               ②低耦合度。MVVM框架的分工是非常明确,数据是独立于UI。数据和业务逻辑处于一个独立的ViewModel中,ViewModel只需要关注数据和业务逻辑,不需要和UI或者控件打交道,即便是控件改变了(例如:TextView换成EditText),ViewModel也几乎不需要更改的。
               ③可复用性。一个ViewModel可以复用到多个View中。对于版本迭代中频繁的UI改动,更新或新增一套View即可。
               MVVM的优点还体现在团队协作、单元测试等方面。总之,Google推进的MVVM开发框架优势非常明显,是今后Android开发框架的主要发展趋势。
 
 相关知识点:
 
软考在线指南
优惠劵及余额
在线支付
修改密码
下载及使用
购买流程
取消订单
联系我们
关于我们
联系我们
商务合作
旗下网站群
高级资格科目
信息系统项目管理师 系统分析师
系统架构设计师 网络规划设计师
系统规划与管理师
初级资格科目
程序员 网络管理员
信息处理技术员 信息系统运行管理员
中级资格科目
系统集成项目管理工程师 网络工程师
软件设计师 信息系统监理师
信息系统管理工程师 数据库系统工程师
多媒体应用设计师 软件评测师
嵌入式系统设计师 电子商务设计师
信息安全工程师
 

本网站所有产品设计(包括造型,颜色,图案,观感,文字,产品,内容),功能及其展示形式,均已受版权或产权保护。
任何公司及个人不得以任何方式复制部分或全部,违者将依法追究责任,特此声明。
本站部分内容来自互联网或由会员上传,版权归原作者所有。如有问题,请及时联系我们。


工作时间:9:00-20:00

客服

点击这里给我发消息 点击这里给我发消息 点击这里给我发消息

商务合作

点击这里给我发消息

客服邮箱service@rkpass.cn


京B2-20210865 | 京ICP备2020040059号-5 |京公网安备 11010502032051号 | 营业执照 | Copyright ©2000-2023 All Rights Reserved 软考在线版权所有