学术堂首页 | 文献求助论文范文 | 论文题目 | 参考文献 | 开题报告 | 论文格式 | 摘要提纲 | 论文致谢 | 论文查重 | 论文答辩 | 论文发表 | 期刊杂志 | 论文写作 | 论文PPT
学术堂专业论文学习平台您当前的位置:学术堂 > 毕业论文 > 在职硕士论文 > 工程硕士论文 > 软件工程硕士论文

智能家居系统的主要技术

来源:学术堂 作者:陈老师
发布于:2017-03-16 共5732字
  第二章 智能家居系统的主要技术
  
  2.1 Android 系统平台的研究与分析
  
  2.1.1 Android 平台的架构
  
  Android 是一种基于 Linux 内核的操作系统,一般运用于移动平台,并且源代码是开放的。这个平台有四个组成层,分别是操作系统、中间件、用户界面和应用软件。Android系统的构建是一种层与层之间互相分离的方式,叫做软件层叠。软件层叠的构建方式对每一层进行明确的分工,层和层之间的耦合度很低,从而使得当某层应用的下层或下下层发生变化时,该层应用不会受到影响且无需更改。图 2-1 为 Android 系统的体系结构[21].
  
  2.1.2 Android 平台的特性
  
  从图 2-1 可以看出,Android 系统主要分为四层,从低到高分别为 Linux 核心层(LINUXKERNEL)、系统运行层(LIBRARIES)、应用程序框架层(APPLICATION FRAMEWORK)及应用程序层(APPLICATIONS)。系统运行层主要包括系统运行库 LIB 和 Android 运行环境,通常称之为中间层[22].下面分别对 Android 操作系统的五个组成部分进行简单的分析。
  
  1.应用程序层
  
  Android 系统自带一组关键应用程序,包括各种应用软件,如通话程序、短信程序等。
  
  这些应用程序都是 Java 编写的。
  
  2.应用程序框架
  
  该层包括所有开发所用的 SDK 类库和某些未公开的接口类库,是移动平台的核心机制的体现。开发者开发的应用和核心应用一样,可以访问所有的应用框架 APIs.为了简化组件的重复利用而设计了应用框架。任何应用发布的组件都可以被其他的应用调用,当然必须遵守应用框架规定的安全限制。同时,允许组件被其他组件替代[23].
  
  3.函数库
  
  该层与移动设备的平台应用相关,并通过 Java 调用接口函数实现与上层之间的通信。
  
  该层由 C/C++开发,主要包括媒体库、Web 浏览引擎、关系数据库引擎、图形库等功能[24].
  
  4.Android 运行环境
  
  Android 运行环境以虚拟机 Dalvik Virtual Machine 为主,虚拟机以编码格式运行。其中 Dalvik 虚拟机和标准的 Java 虚拟机之间的区别主要体现在,Dalvik 是基于寄存器的,而标准的 Java 虚拟机是基于堆栈的,并且 Dalvik 经过优化可在有限的内存中同时运行多个虚拟机程序实例,每一个 Dalvik 应用可作为一个独立的 Linux 进程执行[25].
  
  5.Linux 核心层
  
  Linux 核心层是用户空间和内核空间的分界线。并且仅 Linux 核心层属于内核空间,其余三层均属于用户空间[26].Linux 核心层是硬件和软件之间的抽象层,通过 C 语言开发并提供基本功能。
  
  2.1.3 Android 应用开发的基本组件介绍
  
  Android 应用程序中主要包括四种类型的组件:Activity、Service、BroadcastReceiver、ContentProvider.在 Android 中,一个应用程序可以使用其他应用程序的组件,这是 Android系统一个非常重要的特性[27].此外,还有一个组件 Intent,它可以将应用中的各种组件联系起来进行通信。Android 应用程序的全局配置文件是 AndroidManifest.xml,当各个组件在该文件中配置好后,文件就可以把这些组件有机的结合起来[28].图 2-2 显示了 Android应用程序中的各个组件之间的结构关系示意图。图 2-3 显示了 Android 应用程序中的各个组件的工作流程。
  
  1.Activity
  
  Activity 是用户和应用程序交互的窗口,是程序的呈现层,相当于窗体[29].Activity 中包含了一个 getWindow()方法,该方法返回该 Activity 所包含的窗口。对于 Activity 而言,开发者一般不需要关心 Window 对象。如果应用程序不调用 Activity 的 setContentView()来设置该窗口显示的内容,那么该程序将显示一个空窗口。
  
  在应用中,一个 Activity 通常就是一个单独的一屏,每一个 Activity 都被实现为一个独立的类,并且继承于 Activity 这个基类。这个 Activity 类将会显示由几个 Views 控件组成的用户接口,并对事件做出响应。大部分应用都会包含多个 Activity.每一个屏幕,就是一个 Activity,当打开一个屏幕时,之前的那一个屏幕都会被置为暂停状态,并且压入历史堆栈中,用户可以通过回退操作返回到以前打开过的屏幕[30].虽然很多 Activity 一起工作组成了一个应用程序,但每一个 Activity 都是相对独立的。
  
  Android 应用通过 View 类的子类对 Activity 窗口的可视化内容进行展示。如图 2-4 是Android 系统的用户界面组件层次图。
  
  Activity 中有一个用来设置窗口风格的方法是 setTheme(int resid),它可以实现不显示窗口的标题,或者用对话框的形式来显示窗口等。
  
  Activity 的创建预示着整个组件生命周期的开始,Activity 生命周期是指 Activity 从启动到销毁的全过程[31],在生命周期中起重要作用的是它的事件回调函数。Activity 提供了七个生命周期的事件回调函数,在这些事件回调函数中添加相应的功能代码可以实现或者完成相应的功能。
  
  如图 2-5 显示了 Activity 生命周期及相关回调方法。
  
  在 Activity 生命周期中会回调以下几种方法[32]:
  
  onCreate:Activity 第一次被创建时调用,方法内部可以用于完成 Activity 的初始化、创建 View 控件和绑定数据等。
  
  onStart():Activity 显示在屏幕上,对用户可见时调用此方法。
  
  onRestart():Activity 从停止状态进入活动状态前,调用此方法。
  
  onResume():Activity 开始和用户交互,用户可输入信息时调用此方法。
  
  onPause():当系统将重新启动前一个 Activity 或者开始新的 Activity 调用当前 Activity的此方法,即当前 Activity 进入暂停状态。此方法常用于保存改动的数据或者释放必要的内存。
  
  onStop():当 Activity 对用户不可见时调用,通常由于新的 Activity 启动并覆盖当前的Activity 或者当前的 Activity 被销毁。
  
  onDestroy():Activity 被彻底销毁前最后调用的方法,通常由于用户主动使用 finish()方法或者系统释放必要的内存。
  
  2.Service
  
  相比于 Activity 组件的生命周期,Service 组件的生命周期要简单的多,在其整个生命周期中只继承了 onCreate、 onStart()和 onDestroy()三个事件回调方法,分别用于创建、启动和销毁 Service.当第一次启动 Service 时,先后调用了 onCreate 和 onStart()两个方法,当停止 Service 时,则执行 onDestroy()方法。如果 Service 已经启动了,当再次启动 Service时,不会再执行 onCreate 方法,而是直接执行 onStart()方法。
  
  Service 服务可分为两种类型:一种为本地服务(Local Service),另一种为远程服务(Remote Service)。本地服务用于程序内部,通常用于实现应用程序自身中一些耗时的任务处理,比如查询升级信息。远程服务主要用于系统内部的应用程序之间,可被其他应用程序复用。
  
  3.Broadcast Receiver
  
  广播(BroadCast)是 Android 系统中广泛使用的运用在应用程序间传递信息的一种机制。广播接收器(Broadcast Receiver)则是用于接收并处理这些广播通知的组件[33],是Android 基本组件之一。它和事件处理机制类似,只不过事件的处理机制是程序组件级别的,而广播处理机制是系统级别的[34].
  
  Android 系统中可以接收的广播有两种,一种是普通广播(Normal broadcasts),而另一种则是有序广播(Ordered broadcasts)。普通广播一般就是通过 Context.sendBroadcast()发送,它是完全异步的[30],广播接收者的运行也是没有顺序的,几乎同时运行。有序广播通过 Context.sendOrderedBroadcast()方法发送,按照接收者的优先级顺序接收广播,优先级别在 intent-filter 中的 priority 中声明。
  
  使用广播接收器接收广播通知,需要首先定义一个广播接收器,定义广播接收器类需要继承 BroadcastReceiver 基类来实现,并且必须重写其中的 onReceive()方法,此方法用于响应相应的广播事件处理[31].
  
  4.Content Provider
  
  对于 Android 应用而言,它们必须相互独立,各自运行在自己的 Dalvik 虚拟机实例中,如果这些 Android 应用之间需要实现实时的数据交换,就要用到 Android 系统为这种跨应用的数据交换提供的一个标准:ContentProvider[35].
  
  通 常 与 ContentProvider 结 合 使 用 的 是 ContentResolver , 一 个 应 用 程 序 使 用ContentProvider 暴露自己的数据,而另一个应用程序则通过 ContentResolver 来访问数据[36].
  
  5.Intent
  
  Intent 过滤器,即 Intent Filter.根据 Intent 中的动作(Action)、类别(Category)和数据(Data)等内容,对适合接收该 Intent 的组件进行匹配和筛选,用于隐式启动组件过程中。Intent 过滤器同样可以匹配数据类型、路径和协议,还包括可以用来确定多个匹配项顺序的优先级。Android 应用中的 Activity 组件、Service 组件和 BroadcastReceiver 都可以注册 Intent 过滤器[37],可以注册一个也可以注册多个。组件如果没有注册任何 Intent 过滤器,则只能接收显式的 Intent,而注册了 Intent 过滤器的组件既可以显式使用 Intent 也可以隐式使用 Intent.
  
  2.2 NDK 简介
  
  1.Android NDK
  
  Android NDK(Android Native Development Kit)是在 SDK 前面又加上了“原生”二字,是 Android SDK 的伴随工具,可以允许用户采用诸如 C/C++原生编程语言开发 Android应用程序[38].
  
  通过 NDK,开发人员便能在 Android 平台上使用 JNI 技术(Java Native Interface),实现在应用程序中调用本地的二进制共享库[39].
  
  2.Android 的 JNI
  
  应用程序用Java开发,操作系统代码则是C代码,它们之间的通信需要用JNI来实现。
  
  JNI(Java Native Interface),Java 的本地接口,它循序 Java 代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得 Java 虚拟机(VM)内部运行的 Java 代码能够与其他编程语言编写的应用程序和库进行交互操作[40].采用 JNI 技术可以提升 Android 系统整体的操作反应。
  
  2.3 Android 的数据存储技术
  
  Android 系统提供的数据存储方式主要有共享优先存储(SharedPreferences)、SQLite数据库存储(SQLite Database)、文件存储(Files)、网络存储(Networks)、内容提供器(ContentProviders)五种类型[41].
  
  共享优先存储(SharedPreferences)SharedPreferences 是一种简单的、轻量级的用于保存应用程序基本数据的类,使用SharedPreferences 进行数据存储有一个很好的优点是它完全屏蔽了对文件系统的操作过程。
  
  SQLite 数据库存储(SQLite Database)SQLite 是一款轻型的数据库,占用的资源非常少。与传统的数据库相比,SQLite 的实时性更加完善,系统只需要很少的开销,底层的控制能力也更强,通过对嵌入式系统的资源的充分利用,存储数据的速度快而且安全可靠[42].除了这些优点以外,SQLite 无需配置,访问简单,支持标准 SQL、精简性、源代码开放等特点,非常适合使用于基于 Android 平台的移动设备,是应用程序中最常用也是最有效的数据交互方式。
  
  文件存储(Files)Android 文件系统是基于 Linux 的文件系统,其文件存储和访问有三种方式。首先,应用程序能够创建仅能够用于自身访问的私有文件[43],这类文件存放在应用程序自己的目录内,这类存储成为内部存储。其次,Android 系统提出了对 SD 卡等外部设备的访问方法,这类文件存储方式成为外部存储。另外,Android 系统还可以访问保存在资源目录中的原始文件及 XML 文件,此类文件一般保存在/res/raw 目录和/res/xml 目录下。
  
  网络存储(Networks)网络存储最重要的方式是支持HTTP协议,编写的Android网络应用就相当于一个浏览器。
  
  Android 发送请求和获取网络数据有很多种方式。
  
  内容提供器(Content Providers)Content Provider 是 Android 系统中基本组件之一,用来存储和获取数据并使这些数据可以被所有的应用程序访问,它是应用程序之间共享数据的唯一方法[44].Android 系统为一些常见的数据类型内置了一系列的 Content Providers,开发人员可以通过这些内容提供器对设备上的这些数据进行访问操作。
  
  根据对以上五种数据存储类型的分析,本文最终选用 SQLite 作为本智能家居系统终端软件的数据存储方式。
  
  2.3.1 Android 的 SQLite
  
  SQLite 数据库系统体系结构由四部分组成,即内核(Core)、SQL 编译器(SQL Complier)、后端(Backend)和附件(Accessories)[45].
  
  接口程序(Interface)由 SQLite C-API 组成[46].当执行一个包含 SQL 语句的字符串时,接口程序要把这个字符串传递给分词器(Tokenizer)。分词器的任务是把原有的字符串分成一个个标识符,并把这些标识符传递给语法分析器(Parser)。语法分析器分析通过分词器产生的标识符语法的结构,并得到一棵语法树[47].代码生成器(Code Generator)遍历语法树,并且生成一个等价的字节编码程序代码发生器。在语法分析器收集完符号并把之转换成完全的 SQL 语句时,它调用代码产生器来产生虚拟的机器代码,这些机器代码将按照 SQL 语句

        2.4 WI-FI 技术简介
  
  2.4.1 WI-FI 技术概述
  
  Wi-Fi 是一种高频无线信号,它可以以无线的方式把电脑、手机等终端设备互相连接起来。Wi-Fi 是 IEEE 802.11b 的别称,是由名为“无线以太网相容联盟”(WECA)发布[48].
  
  802.11b 定义了一个在 2.4GHz 的 ISM 频段上的数据传输速率高达 11Mbit/s 的物理层,世界上绝大多数的国家都在用 2.4GHz 的 ISM 频段[49].可以说 Wi-Fi 几乎遍布全球。Wi-Fi 的覆盖范围足以满足人们的日常需求,人们可以通过 Wi-Fi 技术访问互联网,不必拘泥于有线网的拘束,给用户带来更方便省心的上网体验。
  
  2.4.2 WI-FI 技术的特点
  
  1.覆盖范围广
  
  由于 Wi-Fi 技术的无线电分布范围较广,可覆盖的半径大约有 100 米[50],因此它非常适用于住宅区和写字楼区域。
  
  2.速度较快,且具有可靠性
  
  802.11b 标准下的 Wi-Fi 技术最高带宽可以达到 11Mbps[51],传输速度很快,所以具有很好的稳定性与可靠性。
  
  3.不需要排线
  
  无线网络免去了以前排线的麻烦,节约了成本的同时,为移动办公也带来了更多的方便,因此市场前景非常广阔。
  
  4.健康安全
  
  Wi-Fi 的发射功率非常小,与对讲机 5W 的发射功率相比,Wi-Fi 低于 100mW 的发射功率几乎可以忽略。因此 Wi-Fi 对人体是完全没有危害的。
  
  综合以上的分析来看,本系统选用 Wi-Fi 技术作为无线通信技术对数据进行传输非常符合现实的需要。
  
  2.5 本章小结
  
  本章对智能家居系统所需要用到的技术进行了研究。首先对 Android 系统平台进行了研究与分析,介绍了 Android 平台的架构、特性以及应用开发的基本组件。随后介绍了后面系统终端软件开发要用到的 Android 上层应用和 NDK 技术,为软件开发做好准备。接着分析了 Android 的数据存储技术,选择 SQLite 作为本系统的数据库。最后介绍了本系统采用的 Wi-Fi 通信技术。
相关标签:
  • 报警平台
  • 网络监察
  • 备案信息
  • 举报中心
  • 传播文明
  • 诚信网站