基于Android的指南针软件的设计与实现(程序代码+任务书+说明书+外文翻译+演示文稿)_第1页
基于Android的指南针软件的设计与实现(程序代码+任务书+说明书+外文翻译+演示文稿)_第2页
基于Android的指南针软件的设计与实现(程序代码+任务书+说明书+外文翻译+演示文稿)_第3页
基于Android的指南针软件的设计与实现(程序代码+任务书+说明书+外文翻译+演示文稿)_第4页
基于Android的指南针软件的设计与实现(程序代码+任务书+说明书+外文翻译+演示文稿)_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

i基于Android的指南针软件的设计与实现摘要随着科技的发展,智能手机得到普及,由Google公司开发的基于Linux的自由及开放源代码的操作系统Android凭借其开放性及丰富的应用受到广大手机用户的喜爱,逐渐成为了市场占有量最大的移动平台操作系统,所以开发基于Android系统的应用软件变得十分必要。本应用软件针对智能手机用户日常出游、出差时经常遇到的找不着方向的问题,采用软件工程中结构化思想、标准的软件设计流程,从可行性研究、需求分析、系统设计及系统实现和测试等步骤来开发,基于Android开发平台,采用Java语言和xml布局编写,实现了利用手机自带的电子罗盘传感器来为用户指明方向的功能。关键词:Android;操作系统;智能手机;电子罗盘;指南针iiDesignandimplementationofacompasssoftwarebasedonAndroidAbstractWiththedevelopmentoftechnology,smartphonesgainpopularity,developedbyGooglebasedonthefreeandopen-sourceLinuxoperatingsystemAndroid,withitsopennessandrichapplicationslovedbythemajorityofmobilephoneusers,hasbecomethelargestmarketshareofmobileoperatingsystemplatform,sodevelopersbasedontheAndroidsystemapplicationsoftwarebecomesnecessary.Thisapplicationsoftwareisdesignedfordealtheproblemwhichthesmartphoneuserscouldnotfindthedirection,andthisproblemalwayshappensduringthedailytraveltimeordailyoutings,usingstructuredsoftwareengineeringideas,usingstandardsoftwaredesignprocess,fromfeasibilitystudies,requirementsanalysis,systemsdesignandsystemimplementationandtestingstepstodevelop,basedonAndroiddevelopmentplatform,writteninJavalanguageandxmllayouttoachieveausethephonecomeswithanelectroniccompasssensortoindicatethedirectionoftheuserfunction.Keywords:Android;operatingsystem;smartphones;electroniccompass;compass0目录摘要.IABSTRACT.II1绪论.11.1ANDROID系统开发背景.11.1.1研究背景.11.1.2Android开发平台的优势.11.1.3Android的市场前景.21.1.4Android的国内市场.21.2课题的目的与意义.31.3本论文主要研究内容.32ANDROID相关知识.42.1开发工具.42.1.1Eclipse.42.1.2AndroidSDK.52.1.3ADT.52.2ANDROID系统的特性.52.3ANDROID系统平台架构.62.3.1Linux内核.72.3.2Android程序库.72.3.3Android运行库.82.3.4应用程序框架.82.3.5应用程序.82.4ANDROID系统的四大核心组件.92.4.1Activity及其生命周期.92.4.2Service及其生命周期.102.4.3BroadCastRececiver介绍.112.4.4ContentProvider介绍.132.5ANDROID中的传感器.142.6ANDROID中的界面布局.152.7ANDROIDANIMATION动画.173ANDROID的指南针软件的设计及准备.193.1研究目标.193.2可行性研究.193.2.1经济可行性.203.2.2技术可行性.203.2.3操作可行性.213.3需求分析.2213.3.1实用性原则.223.3.2安全可靠性原则.223.3.3指南针软件的基本操作需求.223.3.4指南针软件的基本界面需求.223.3.5软件性能需求.233.3.6运行环境需求.233.4配置开发环境.233.4.1安装JDK.233.4.2安装Eclipse.253.4.3安装SDK.253.4.4安装ADT.263.5制作指南针软件的材料准备.264基于ANDROID的指南针软件的实现.284.1界面设计.284.2方向传感器的应用.294.2.1获取管理服务.294.2.2方向传感监听器的注册和取消注册.294.2.3onSensorChanged及其效果.304.3程序退出对话框.314.4ANDROIDMANIFEST.XML.325基于ANDROID的指南针软件的测试.346异常处理.39总结.40参考文献.41致谢.42附录.43外文原文及其中文翻译.47201绪论智能手机,简单来说就是像电脑一样,具有独立的操作系统,可以通过安装第三方软件来扩充手机功能的手机。智能手机跟电脑一样,操作系统不止有一种,原因主要是手机的生产厂家很多,要统一基本不可能。但那是经过大浪淘沙,有四种手机操作系统被广大用户广泛接受,它们分别是Symbian、Android、WindowMobile和iOS。其中Android是由谷歌、开放手持设备联盟联合研发,谷歌独家推出的智能操作系统,2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班操作系统,跃居全球第一。2012年11月数据显示,安卓占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%,彻底占领中国智能手机市场,也成为了全球最受欢迎的智能手机操作系统,因为谷歌推出安卓时采用开放源代码(开源)的形式推出,所以导致世界大量手机生产商采用安卓系统生产智能手机,再加上安卓在性能和其他各个方面上也非常优秀,便让安卓一举成为全球第一大智能操作系统。1.1Android系统开发背景Android是一套真正意义上的开放性移动设备综合平台,它包括操作系统、中间件和一些关键的平台应用。Android最大特点在于它是一个开放的体系架构,具有非常好的开发和调试环境,而且还支持各种可扩展的用户体验,Android里面具有非常丰富的图形系统、对多媒体的支持功能和非常强大的浏览器。Android平台的开放性等特点既能促进技术(包括平台自身)的创新,又有助于降低开发成本,还可以使运营商能非常方便地制定特色化的产品,因此,它具有很大的市场发展潜力。1.1.1研究背景Android一词的本义指“机器人”,同时Android也是Google于2007年11月5日宣布的基于linux平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。2008年9月22日,美国运营商T-MobileUSA在纽约正式发布第一款基于Android的手机T-MobileG1。该款手机为宏达电制造,是世界上第一部使用Android操作系统的手机,支持WCDMA/HSPA网络,理论下载速率7.2Mbps,并支持Wi-Fi。在随后的几个月越来越多的厂商也开始宣布将提供Android手机。1.1.2Android开发平台的优势Android是一个真正意义上的开放性移动设备综合平台。它包括操作系统、用户界面和应用程序移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。谷歌与开放手机联盟合作开发了Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。1通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。所有的Android应用之间是完全平等的。在开发之初,Android平台就被设计成一个由一系列应用所组成的平台。所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。因此,用户甚至可以将系统中默认的电话拨号软件替换成其他第三方的电话拨号软件。你也可以改变主界面显示窗口的内容,或者将手机中任意的应用替换成你所需要的其他应用。Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。此外应用程序不仅可以通过标准API访问核心移动设备功能,互联网,应用程序还可以声明它们的功能可以供其他应用程序使用,比如前面图Android平台为开发人员提供了大量的实用库和工具,开发人员可以很快速的创建自己的应用。1.1.3Android的市场前景美国知名的互联网统计公司comScore近日刚刚发布了今年三月至五月的美国智能手机市场调研报告,这份最新的报告显示,全美目前共有4910万用户使用智能手机,其中有8.1%的用户为近三个月来新增用户。作为打拼多年的老品牌,黑莓仍然以41.7的市占率稳居全美智能手机占有率排行版首位,其后的苹果和微软的是市占率分别为24.4%和13.2%,特别值得一提的是,谷歌Android平台的占有率以13%的市占率紧随微软的13.2%之后,Android平台的整体市占率增加了4%,而如果将时间跨度限制到3月至5月的这三个月内,Android平台市占率增长数字甚至接近了45%。1.1.4Android的国内市场在国内,android社区十分红火,这些社区为android在中国的普及做了很好的推广作用,同时也为Android相关产品的消费提供了市场。国内厂商和运营商也纷纷加入了android阵营,包括中国移动,中国联通,华为通讯,联想等大企业。同时不仅仅局限于手机,国内厂家也陆续推出了采用android系统的MID(平板电脑)产品,比较著名的包括由Rockchip和蓝魔推出的同时具备高清播放和智能系统的音悦汇W7。我们可以预见android也将会被广泛应用在国产智能上网设备上,将进一步扩大Andorid系统的应用范围。android智能终端已成为当前智能手机,信息家电发展的主要方向,而网络故障的诊断解决已成为解决售后和用户正常使用的关键,研究和开发相关网络模块诊断程序变得尤为重要。本论文的主要研究目的就是研究为接下来的有关Android产品的做好售后2服务工作,开发一个智能终端的网络诊断界面,完成相关网络的检测,并做好功能扩展。1.2课题的目的与意义随着时代的发展和人民生活水平的提高,出差和出游已经成为人们日常生活中的常见事情,大多人也喜欢到不同的地方去欣赏不一样的景色、感受当地人不同的生活方式。但是,当人们独自一人到达陌生的环境时,找不着方向便成为人们常常遇到的问题。此时人们会选择地图和导航软件来寻找路线,但是,地图需要人们知道自身所走的方向,而当网络不畅时,导航软件便失去作用,此时一个指南针软件的出现显得尤为重要。本软件是一款指南针软件,旨在为外出的智能手机用户指明方向,方便大家的生活。1.3本论文主要研究内容本论文是对基于Android的指南针软件的设计与实现,目的是为了在陌生环境为外出的人们提供指明方向的工具,是为了方便人们的生活。论文中介绍的指南针软件是通过Android系统中的电子罗盘传感器实现的,所以本论文主要研究如何通过对指南针软件界面的设计和如何通过电子罗盘传感器(方向传感器)实现。主要内容:1综述指南针软件在Android平台上的应用及意义;2了解Android系统UI设计的技术,;3熟悉指南针软件的开发环境及其测试环境;4设计基于Android的指南针软件开始界面;5.深入分析指南针的原理方法及界面的设计流程;6熟练掌握基于Android的指南针软件的编写;7设计与实现基于Android的指南针软件。32Android相关知识2.1开发工具2.1.1EclipseEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentKit,JDK)。1.基本介绍:虽然大多数用户很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C+、COBOL、PHP等编程语言的插件已经可用,或预计将会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于Eclipse的应用程序的一个突出例子是IBMRationalSoftwareArchitect,它构成了IBMJava开发工具系列的基础。2.语言拓展:Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C+和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、RationalSoftware、RedHat及Sybase等。Eclipse是一个开放源码项目,它其实是VisualAgeforJava的替代品,其界面跟先前的VisualAgeforJava差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。3.主要组成:4Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成EclipsePlatform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C开发、PDE用来支持插件开发,EclipsePlatform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。EclipsePlatform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。2.1.2AndroidSDK软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,AndroidSDK指的是Android专属的软件开发工具包。AndroidSDK提供了Windows/Linux/Mac平台上开发Android应用开发组件,其包含了在Android平台上开发移动应用的各种工具集。AndroidSDK不仅包括了Android模拟器和用于Eclipse的Android开发工具插件(ADT),而且包括了各种用来调试、打包以及在模拟器上安装应用的工具。AndroidSDK主要是以Java为基础,用户可以使用Java语言来开发Android平台上的软件应用。通过SDK提供的一些工具将其打包成apk文件,然后应SDK中的模拟器来模拟和测试软件在Android平台上的运行情况和效果。相关特性:其最震撼人心之处在于Android手机系统的开放性和服务免费。Android是一个对第三方软件完全开放的平台,开发者在为其开发程序时拥有更大的自由度,突破了iPhone等只能添加为数不多的固定软件的枷锁;同时与WindowsMobile、Symbian等厂商不同,Android操作系统免费向开发人员提供,这样可节省近三成成本。2.1.3ADTAndroid为Eclipse订制了一个插件,即AndroidDevelopmentTools,为Android开发提供开发工具的升级或变更,也为用户提供一个强大的综合环境用于开发Android应用程序。目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。ADT扩展了Eclipse的功能,可以让用户快速地创建Android项目,创建应用程序界面,以及SDK工具集调试应用程序。2.2Android系统的特性1.开放性:5在优势方面,Android平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。2.挣脱运营商的束缚:在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈。3.丰富的硬件选择:这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用、联系人等资料更是可以方便地转移。4.不受任何限制的开发商:Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。5.无缝结合的Google应用:如今叱诧互联网的Google已经走过10年度历史。从搜索巨人到全面的互联网渗透,Google服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝结合这些优秀的Google服务。1)可重用和可替换组件的程序应用框架2)针对移动设备优化过的Dalvik虚拟机3)集成了基于开源Webkit引擎的网页浏览器4)经过优化过的自定义2D图形库和基于OpenGLES1.0库可选硬件加速5)SQLite结构化的数据存储数据库6)支持常规的音频视频多媒体格式,如MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF、GSM电话(硬件决定)7)蓝牙、GPRS-EDGE、3G和Wifi无线网络(硬件决定)8)相机、GPS全球定位、导航和感应加速器9)丰富的开发环境包含设备模拟器、工具、调试器、内存和性能分析工具,以及Eclipse集成开发环境插件62.3Android系统平台架构对操作系统而言,必须做到设计合理、层次分明。同时还需考虑整个系统的结构要聚耦适当,Android系统是基于Linux内核的,因此还具备开源的特性,以符合开发人员共同工作。Android操作系统的体系结构可分为四层,由上到下依次是应用程序、应用程序框架、核心类库和Linux内核,其中核心类库层还包括Android运行时环境。系统架构如图2-1所示。图2-1Android系统平台架构参照图2-1,对系统各部分主要组件作以下描述。2.3.1Linux内核Android的核心系统服务依赖于Linux内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也同时作为硬件和软件栈之间的硬件抽象层。Android基于Linux2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。LinuxKernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。7分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP(ServiceAccessPoint),专业点可以说是高内聚、低耦合。2.3.2Android程序库Android包括一个被Android系统中各种不同组件所使用的C/C+集库。该库通过Android应用程序框架为开发者提供服务。以下是一些核心库:1)SurfaceManager:管理显示子系统,并且为多个应用程序提供2D和3D图层的无缝融合。2)MediaFramework:基于OpenCORE的多媒体框架,支持多种常用的音频、视频格式文件的回放和录制,同时支持静态图像文件。3)SQLite:一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。4)OpenGLES:3D图形库,用于3D图形渲染,该库可以使用3D赢家加速。5)FreeType:位图(Bitmap)和矢量(Vector)字体显示。6)WebKit:支持Android浏览器和一个可嵌入的Web视图7)SGL:2D图形库,用于2D图形渲染。8)LibC:一个从BSD继承的标准C系统函数库,他是专门为基于嵌入式Linux设备制定的。2.3.3Android运行库Android运行时由两部分组成:Android核心库集和Dalvik虚拟机。其中核心库提供了Java语言核心库所能使用的绝大部分功能,而虚拟机则负责运行Android应用程序。每个Android应用程序都运行在单独的一个Dalvik虚拟机内,因此Dalvik专门针对同时高效地运行多个虚拟机进行了优化,因此Android系统可以方便地实现对应用程序进行隔离。实际上,JVM虚拟机运行的是Java字节码(通常是.class文件),但Dalvik运行的是其专有的dex(DalvikExecutable)文件。JVM直接从.class文件或JAR包中加载字节码然后运行;而Dalvik则无法直接从.class文件或JAR包中加载字节码,它需要对DX工具将应用程序的所有.class文件编译成.dex文件,Dalvik则运行该.dex文件。2.3.4应用程序框架应用程序框架可以说是一个应用程序的核心,是所有参与开发的程序员共同使用和遵守的约定,大家在其约定上进行必要的扩展,但程序始终保持主体结构的一致性。其作用是让程序保持清晰和一目了然,在满足不同需求的同时又不互相影响。Android系统提供给应用开发者的本身就是一个框架,所有的应用开发都必须遵守这个框架的原则。8当我们开发Android应用程序时,就是面向底层的应用程序框架进行的。从这个意义上看,Android系统上的应用程序时完全平等的,不管是Android系统提供的程序,还是普通开发者提供的程序,他们都可以访问Android提供的API框架。Android应用程序框架提供了大量API供开发者使用。应用程序框架可作为应用程序开发的基础之外,也是软件复用的重要手段,任何一个应用程序都可发布它的功能模块-只要发布时遵守了框架的约定,那么其他应用程序也可使用这个功能模块。2.3.5应用程序Android系统发布时,会同一系列核心应用程序和常用程序一起发布,如经常电子邮件客户端、SMS程序、日历、地图、浏览器、联系人等、这些应用程序都是用Java编写的。2.4Android系统的四大核心组件Android四大基本组件分别是Activity,Service服务,ContentProvider内容提供者,BroadcastReceiver广播接收器。不是每一个Android应用程序都必须有这四部分组成。2.4.1Activity及其生命周期Activity通俗地讲就是用户界面,它有其自身的生命周期。一个应用程序通常包含多个Activity,它们可以互相切换。Activity的使用需要在mainfest文件中进行声明。一个Activity通常是一个单独的屏幕,Activity生命周期是指Activity从启动到销毁的过程。系统中的Activity被一个Activity栈所管理。当一个新的Activity启动时,将被放置到栈顶,成为运行中的Activity,前一个Activity保留在栈中,不再放到前台,直到运行中的Activity退出为止。Activity表现为四种状态:活动状态(ActiveorRunning):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能够与用户进行交互;暂停状态(Paused):Activity失去焦点,Activity界面被部分遮挡,该Activity不再处于用户界面的最上层,且不能够与用户进行交互。一个暂停状态的Activity依然保持活力(保持所有的状态,成员信息,与窗口管理器保持连接),但是在系统内存不够用的时候将被杀掉;停止状态(Stopped):Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡,但它依然保持所有状态和成员信息,只是它不再可见,它的窗口被隐藏;非活动状态(Killed):当系统内存需要被用在其他地方的时候,一个停止状态的Activity被杀掉。如果一个Activity是Paused或者Stopped状态时可以被恢复,也可以被删除。一个被删除(杀掉)的Activity如果需要重新恢复就需要重启。9Activity的生命周期由几个常用的覆写方法来实现,分别是:onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy(),onRestart()七个方法。整个生命周期,从onCreate()开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。可见的生命周期,从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。前台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有Activity的最前面,和用户进行交互。Activity可以经常在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个Activity处理结果被分发时,当一个新的Intent被分发时。Activity的整个生命周期都定义在下面的接口方法中,所有方法都可以被重载。所有的Activity都需要实现onCreate()去初始化设置,大部分Activity需要实现onPause()去提交更改过的数据,当前大部分的Activity也需要实现onFreeze()接口,以便恢复在onCreate()里面设置的状态。图2-2展示了上述Activity生命周期以及Activity在这些方法过程之中经历的状态改变。10图2-2Activity生命周期过程及历经的状态改变2.4.2Service及其生命周期Service不像Activity那样,它不直接与用户进行交互,没有用户界面,能长期在后台运行,且比Activity具有更高的优先级,在系统资源紧张时不会轻易被Android系统终止。每个服务都是从Service基类中派生的。service可以通过两种方式创建:startService()和bindService().startService():一般用于在后台上传文件或者下载文件等,不跟其他组件通信,就算启动它的应用被销毁了,它仍然会欢快的在后台执行,直到完成任务的时候自刎(自己调用stopSelf())或者被其他人下黑手(调用stopService().bindService():允许其他组件跟它进行通信,允许多个客户端绑定到同一个service上,当所有的客户端都解除绑定后,该service就销毁了。service的生命周期主要是跟这4个回调函数相关,onCreate()、onStartCommend()、onBind()、onDestory()。如下图所示:11图2-3Service生命周期过程及历经的状态改变2.4.3BroadCastRececiver介绍Android系统中有各式各样的广播,当系统/应用程序运行时便会向Android注册各种广播,主要有两种注册类型:第一种是非常驻型广播,此类广播会伴随应该程序的生命周期;第二种是常驻型广播,此类广播不会随应用程序是否关闭而存在,只要有广播就会被系统调用自动运行。Android系统接收到广播后便会对广播进行判断,并找出所需事件,然后向不同应用程序注册事件。一个广播接收者有一个回调方法:voidonReceive(ContextcurContext,IntentbroadcastMsg)。当一个广播消息到达接收者是,Android调用它的onReceive()方法并传递给它包含消息的Intent对象。广播接收者被认为仅当它执行这个方法时是活跃的。当onReceive()返回后,它是不活跃的。有一个活跃的广播接收者的进程是受保护的,不会被杀死。但是系统可以在任何时候杀死仅有不活跃组件的进程,当占用的内存别的进程需要时。这带来一个问题,当一个广播消息的响应时费时的,因此应该在独立的线程中做这些事,远离用户界面其它组件运行的主线程。如果onReceive()衍生线程然后返回,整个进程,12包括新的线程,被判定为不活跃的(除非进程中的其它应用程序组件是活跃的),将使它处于被杀的危机。解决这个问题的方法是onReceive()启动一个服务,及时服务做这个工作,因此系统知道进程中有活跃的工作在做。推荐android开发:广播(broadcast)的应用android中,不同进程之间传递信息要用到广播,可以有两种方式来实现。第一种方式:在Manifest.xml中注册广播,是一种比较推荐的方法,因为它不需要手动注销广播(如果广播未注销,程序退出时可能会出错)。具体实现在Manifest的application中添加:上面两个android:name分别是广播名和广播的动作(这里的动作是表示系统启动完成),如果要自己发送一个广播,在代码中为:Intenti=newIntent(ent.action.BOOT_COMPLETED);sendBroadcast(i);这样,广播就发出去了,然后是接收。接收可以新建一个类,继承至BroadcastReceiver,也可以建一个BroadcastReceiver的实例,然后得写onReceive方法,实现如下:protectedBroadcastReceivermEvtReceiver=newBroadcastReceiver()OverridepublicvoidonReceive(Contextcontext,Intentintent)Stringaction=intent.getAction();if(action.equals(ent.action.BOOT_COMPLETED)/Dosomething;第二种方式,直接在代码中实现,但需要手动注册注销,实现如下:IntentFilterfilter=newIntentFilter();filter.addAction(ent.action.BOOT_COMPLETED);registerReceiver(mEvtReceiver,filter);/这时注册了一个recevier,名为mEvtReceiver,然后同样用上面的方法以重写onReceiver,最后在程序的onDestroy中要注销广播,实现如下:13OverridepublicvoidonDestroy()super.onDestroy();unregisterReceiver(mPlayerEvtReceiver);2.4.4ContentProvider介绍Android中的ContentProvider机制可支持在多个应用中存储和读取数据,这也是跨应用共享数据的唯一方式。数据库在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。不能将数据库设为WORLD_READABLE,每个数据库都只能创建它的包访问,这意味着只有由创建数据库的进程可访问它。如果需要在进程间传递数据,则可以使用AIDL/Binder或创建一个ContentProvider,但是不能跨越进程/包边界直接来使用数据库。一个ContentProvider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此ContentProvider的各种数据类型。也就是说,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。下边列举一些较常见的接口,这些接口如下所示。query:(Uriuri,Stringprojection,Stringselection,StringselectionArgs,StringsortOrder):通过Uri进行查询,返回一个Cursor。insert:(Uriurl,ContentValuesvalues):将一组数据插入到Uri指定的地方。update:(Uriuri,ContentValuesvalues,Stringwhere,StringselectionArgs):更新Uri指定位置的数据。delete:(Uriurl,Stringwhere,StringselectionArgs):删除指定Uri并且符合一定条件的数据。2.5Android中的传感器在Android2.3之后,Google提供了11种传感器共应用层使用。14分别是:SENSOR_TYPE_ACCELEROMETER加速度传感器SENSOR_TYPE_MAGNETIC_FIELD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论