Android天气预报软件计算机毕业设计论文.doc_第1页
Android天气预报软件计算机毕业设计论文.doc_第2页
Android天气预报软件计算机毕业设计论文.doc_第3页
Android天气预报软件计算机毕业设计论文.doc_第4页
Android天气预报软件计算机毕业设计论文.doc_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

找毕业设计、项目源码、编程视频,就上码农网manong365基于Android的天气预报软件的设计与实现摘要本课题研究基于Android平台上的天气预报软件,该工具可以为用户提供最新的天气预报信息,以便用户及时了解最新的天气状况。本论文对基于Android平台的天气预报软件的开发技术进行了分析和研究。先简要介绍了Android开发必备基础知识,再切入软件的具体实现过程。软件的实现是利用网络接口和中国天气网获取网络XML文件,然后通JSON解析取得城市天气信息。本论文首先介绍系统的开发背景和意义,接着详细介绍系统设计以及实现的过程,最后介绍了系统测试和本软件的测试用例以及总结了本次毕业设计整个过程。关键词:Android;天气预报;Web ServiceDesign and implementation of weather forecast based on androidABSTRACT This topic research based on weather forecast software on the Android platform which can provides users with the latest weather forecast information,so that users can understand the latest weather conditions in a timely manner. In this paper, the weather forecast software development technology based on the Android platform is analyzed and studied. It first briefly introduces the Android development essential basic knowledge,then cut into the software implementation process.The realization of the software is the use of the network interface and Chinese weather net access network XML file,and then pass the XML document parsed by JSON to get city weather information. This paper firstly introduces the development of the system background and significance,then introduces system design and implementation process,finally introduces the system testing and the software test cases and summarizes the whole process of the graduation design. Keywords: Android; Weather Forecast;Web Service目 录摘要iABSTRACTii1 绪论11.1 课题研究背景和研究意义11.2 当前研究现状11.3 课题的研究内容11.4 论文框架安排22 开发语言说明32.1 开发语言简介32.1.1 Android简介32.1.2 Android 系统特性32.1.3 Android基本框架(Android Architecture)32.1.4 Android系统的四大组件52.1.5 SQLite简介62.2 搭建Android开发环境62.3 了解JASON的相关知识92.4 Handler、Intent和监听器123 概要设计153.1 概述153.1.1 系统分析的原则153.1.2 系统分析的方法153.2 系统可行性分析153.3 系统需求分析163.4 性能需求分析173.4.1 实用性原则173.4.2 可扩展性与可维护性原则173.4.3 安全可靠性原则173.4.4 用户界面美观原则173.4.5 准确性原则173.4.6 易用性原则173.5 系统流程分析173.6 项目模块划分184 详细设计194.1 设计目标194.2 总体结构设计194.3 文件结构设计194.4 各模块设计214.4.1 主界面模块设计214.4.2 更换城市界面模块设计234.4.3 网络接口模块设计254.4.4 自动定位模块设计254.5 数据库设计265 系统实现与测试295.1 系统实现295.1.1 天气主界面实现295.1.2 更改城市模块实现305.2 系统测试315.2.1 软件测试315.2.2 测试用例315.2.3 测试总结366 总结37参考文献38致 谢39外文文献原文40外文文献译文481 绪论1.1 课题研究背景和研究意义 随着科技的发展,Android在中国的前景十分广阔。国内厂商和许多大运营商也纷纷加入了Android的阵营,不断的推出了Android系统的产品。 Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。Android操作系统最初由Andy Rubin开发,最初主要支持手机。2005年由Google收购注资并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年第三季度,安卓的市场份额高达74.8%,一年前则为57.4%。2013年第一季度,它的市场份额继续增加,达到75%。Android平台的天气预报软件的开发可以进一步扩大天气信息的覆盖面,以便提前预防,使得广大公众能够在第一时间方便且快捷地获取最新的天气预报信息。同时也可以完善公共服务体系,提高公共服务质量,更好地发挥气象事业对经济社会发展的现实性作用。这款天气预报软件给人们带来方便快捷的全天候天气信息,必将成为人们日常生活中必不可少的一部分。本系统界面明了,操作简单,适合所有年龄段的使用。对于人们生活水平的提高有一定的促进作用。1.2 当前研究现状Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序移动电话工作所需的全部软件。作为谷歌企业战略的重要组成部分,Android 将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。国内外的基于Android的天气预报软件相当多,这些软件都具有的最基本的功能,当然就是提供当前天气状况,包括实时温度,当天最高温和最低温,风向风速以及未来若干天的天气概况,数据来源都是各个国家或地区的气象局或天气开放平台。而现在大多数天气预报软件都具有强大且丰富的附加功能,且界面美观人性化。在国内做的比较好的天气软件当属墨迹天气。这款软件功能相当丰富,可以添加多个城市并通过左右滑动切换城市;提供所选城市的实时天气情况,包括当前天气状况,实时温度,当天最高温和最低温,湿度值,PM2.5值,风向风速;可以查看未来一周的温度趋势图;可以查看生活贴士,包括穿衣指数,运动指数,洗车指数等;城市实景天气,每个软件用户都可以查看其他用户上传的其所在地的图片;另外,其界面非常美观且人性化,比如软件的背景图片就是动态天气壁纸,可以随着天气的变化而变化。Android的一大特色就是支持各种桌面插件,而墨迹天气充分利用了这一点,提供了非常丰富的桌面天气插件,显示的信息也可由用户设置。总之,目前墨迹天气是国内做的非常出色的一款天气软件。1.3 课题的研究内容本课题要在Android平台上借助网络接口完成天气预报软件的设计与实现,本软件具有城市选择、查询结果显示等功能。本课题所用到的开发工具为Google为Android开发者提供的开发工具包ADT(Android developer tools),包括eclipse和SDK,并用Java语言完成。本课题遵循了软件工程面向对象的基本原理,利用原型模型,将需求分析、设计、实现和测试过程进行反复迭代,完成了界面、逻辑功能和数据库的设计与实现,最终得到了符合设计要求的软件。本系统研究的是Android平台天气预报软件的实现过程,通过移动网络的支持以及Android平台提供的网络服务支持,通过HTTP的方式获取来自中国天气网最新的天气预报数据,中国天气网免费为用户提供天气预报接口,开发者可以获取国内各个城市的实时天气情况,获取地址为:/data/101280101.html。1.4 论文框架安排本文详细介绍了基于Android平台的天气预报软件的设计实现全过程。从开始到程序设计的实现,将在以下的几章中予以介绍:第1章 绪论,这一章主要讲述了课题研究的背景、意义、内容和当前研究现状以及论文框架的安排。 第2章 开发语言简介,对涉及到的理论知识和使用到的开发工具做相关介绍。第3章 概要设计,主要分析了本软件开发的可行性和需求分析等。第4章 详细设计,主要介绍了本软件各模块的实现过程以及数据库的设计。第5章 系统实现与测试,主要介绍了本软件的实现结果和各模块的测试用例以及测试总结。第6章 总结,总结近三个多月做毕业设计过程中的心得和体会。2 开发语言说明2.1 开发语言简介2.1.1 Android简介Android本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良 Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008 年10月。2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。Android采用了软件堆层的架构,低层以Linux内核工作为基础,只提供基本功能,其他的应用软件则由各公司自行开发。目前最新SDK版本为Android 4.4.2。2.1.2 Android 系统特性 Android系统有如下的几大特性:(1)应用程序框架,支持组件的重用与替换;(2)Dalvik虚拟机,专门为移动设备做了优化;(3)内部集成浏览器,该浏览器基于开源的WebKit引擎;(4)优化的图形库,包括2D和3D图形库;(5)SQLite,用作结构化的数据存储;(6)多媒体支持,包括常见的音频、视频和静态印象文件格式;(7)丰富的开发环境,包括设备模拟器,调试工具,内存及性能分析图表和Eclipse集成开发环境插件。2.1.3 Android基本框架(Android Architecture)Android平台的基本框架如图2-1所示:图2-1 Android基本框架图(1)应用程序层 Android会同一个核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是用JAVA编写的。(2)应用程序框架层开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括;丰富而又可扩展的视图,可以用来构建应用程序, 它包括列表,网格,文本框,按钮,甚至可嵌入的web浏览器。a. 内容提供器使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。b. 资源管理器提供非代码资源的访问,如本地字符串,图形,和布局文件。 c. 通知管理器使得应用程序可以在状态栏中显示自定义的提示信息。d. 活动管理器用来管理应用程序生命周期并提供常用的导航回退功能。(3)Libraries库层 Android 包含一些C/C+库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库:a.系统C库:一个从BSD继承来的标准C系统函数库Libc,它是专门为基于Embedded linux的设备定制的。b.媒体库:基于PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。c.Surface Manager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。d.LibWebCore:一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。(4)系统结构 Android 是运行于Linux kernel之上,Android 的 Linux kernel控制包括安全,存储器管理,程序管理,网络堆栈,驱动程序模型等。APK是安卓应用的后缀,是AndroidPackage的缩写,即Android安装包(apk)。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。2.1.4 Android系统的四大组件在Android系统中,为我们提供了四大基本组件,每个组件是一个视图,但是有些是可见的,有些是不可见的视图,像Activity,ContentProvider是可见的视图,Service和BroadcastReceiver是不可见的,它们只在系统的后台运行。下面分别介绍四大组件:(1)Activity简介Android 中,所有程序都运行在Activity 中,是Android 最基本的组成部分之一。在Android程序中,Activity 一般代表手机屏幕的一屏。Activity就相当于浏览器中的一个网页,并且可以添加Button、Check box 等控件。一个Android 应用是由多个Activity 组成的。这多个Activity 之间可以进行相互跳转,例如,按下一个Button按 钮后,可能会跳转到其他的Activity。和网页跳转稍微有些不一样的是,Activity 之间的跳转有可能返回值,例如,从Activity A 跳转到Activity B,那么当Activity B 运行结束的时候,有可能会给Activity A 一个返回值。 当打开一个新的屏幕时,之前一个屏幕会被置为暂停状态,并且压入历史堆栈中。用户可以通过回退操作返回到以前打开过的屏幕。可以选择性的移除一些没有必要保留的屏幕,因为Android会把每个应用的开始到当前的每个屏幕保存在堆栈中。(2)Service简介 Service 是android 系统中的一种组件,它跟Activity 的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service 是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。Service 可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD 卡上文件的变化,再或者在后台记录地理信息位置的改变等。开启Service有两种方式:a. Context.startService():Service会经历onCreate - onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次 );StopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用StopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 b. Context.bindService():Service会经历onCreate()-onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind - onDestroyed相应退出,所谓绑定在一起就共存亡了。(3)Broadcast Receiver简介在Android 中,Broadcast是 一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver 是对发送出来的Broadcast进行过滤接受并响应的一类组件。可以使用BroadcastReceiver 来让应用对一个外部的事件做出响应。BroadcastReceiver不能生成UI,也就是说对于用户来说不是透明的,用户是看不到的。BroadcastReceiver通过 NotificationManager 来通知用户这些事情发生了。BroadcastReceiver 既可以在AndroidManifest.xml 中注册,也可以在运行时的代码中使用Context.registerReceiver()进行注册。只要是注册了,当事件来临的时候,即使程序没有启动,系统也在需要的时候启动程序。各种应用还可以通过使用Context.sendBroadcast () 将它们自己的Intent Broadcasts广播给其他应用程序。(4)ContentProvider简介Content Provider 是Android提供的第三方应用数据的访问方案。在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许其他直接访问的。Andorid当然不会真的把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类, 封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content:/com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST 更为灵活。和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的,但实现者不需要按照这个模式来做,给id的uri也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。2.1.5 SQLite简介SQLite是一款嵌入式的轻型数据库,它只占用很少的资源,有时只需几百K。它支持Windows/Linux/Unix等操作系统,它能跟Java、C#等程序设计语言相结合,还有ODBC接口。它处理数据的速度比Mysql、PostgreSQL等数据库都快。Android作为目前主流的移动操作系统,完全符合SQLite占用资源少的优势,故在Android平台上,集成了一个嵌入式关系型数据库SQLite。本数据库支持功能如下:1.自动建表,支持属性来自继承类:可根据注解自动完成建表,并且对于继承类中的注解字段也支持自动建表。2.自动支持增删改,增改支持对象化操作:增删改是数据库操作的最基本单元,不用重复写这些增删改的代码,并且添加和更新支持类似于hibernate中的对象化操作。 3.查询方式灵活:支持android框架提供的方式,也支持原生sql方式。4.查询结果对象化:对于查询结果可自动包装为实体对象,类似于hibernate框架。5.查询结果灵活:查询结果支持对象化,也支持结果为ListMap形式,这个方法在实际项目中很实用,且效率更好些。2.2 搭建Android开发环境任何事物要运行,都要有它的环境,Android也有它的环境才能够运行,下面介绍Android的开发环境配置。搭建开发环境需要的环境:(1)操作系统:windows 7;(2)下载jdk:/technetwork/java/javase/downloads/index.html,安装jdk。我的安装目录是C:Program FilesJavajdk1.7.0_0.7和C:Program FilesJavajre7,如图2-2所示: 图2-2 jdk安装目录(3)下载androidSDK工具包 adt-bundle-windows-x86,/sdk/index.html,包含eclipse和sdk,版本是adt-bundle-windows-x86-20131030。解压缩adt-bundle-windows-x86包,我的安装路径是F:adt-bundle-windows-x86,里面包含eclipse和sdk,还有一个SDK Manager,sdk下载如图2-3所示: 图2-3 sdk下载(4)配置环境变量,桌面-计算机-右键属性-高级系统设置-高级-环境变量变量名:JAVA_HOME变量值:C:Program FilesJavajdk1.7.0_0.7;具体如图2-4所示: 图2-4 配置JAVA_HOME变量名:PATH变量值:.;%JAVA_HOME%bin;F:adt-bundle-windows-x86sdktools;F:adt-bundle-windows-x86sdkplatform-tools;具体如图2-5所示: 图2-5 配置Path变量名:CLASSPATH变量值:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib;具体如图2-6所示: 图2-6 配置CLASSPATH(5)测试环境变量运行-cmd,输入java或者javac测试命令看成功与否;具体如图2-7所示: 图2-7 测试环境变量(6)相关sdk的更新,具体如图2-8所示: 图2-8 sdk更新(7)配置android模拟器,具体如图2-9所示: 图2-9 配置模拟器(8)点击start,运行模拟器,具体如图2-10所示: 图2-10 运行模拟器至此,android开发环境已搭建完成。2.3 了解JASON的相关知识JSON是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是在Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。(1)基本信息JSON,全称是JavaScript Object Notation。它是基于JavaScript编程语言ECMA-262 3rd Edition-December 1999标准的一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。跟XML相类似,它独立语言,在跨平台数据传输上有很大的优势。(2)基础结构JSON建构有两种结构: a.“名称/值”对的集合。不同的语言中,它被理解为对象,记录,结构,字典,哈希表,有键列表,或者关联数组。 b.值的有序列表。在大部分语言中,它被理解为数组。(3)具体形式 a.对象是一个无序的“名称/值对”集合。一个对象以“”(左括号)开始,“”(右括号)结束。每个“名称”后跟一个“:”(冒号);“名称/值 对”之间使用“,”(逗号)分隔。 b.数组是值的有序集合。一个数组以“”(左中括号)开始,“”(右中括号)结束。值之间使用“,”(逗号)分隔。 c.值可以是双引号括起来的字符串、数值、true、false、 null、对象或者数组。这些结构可以嵌套。 d.字符串是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符即一个单独的字符串。字符串与C或者Java的字符串非常相似。 e.数值与C或者Java的数值非常相似。除去未曾使用的八进制与十六进制格式,除去一些编码细节。(4)格式应用JSON 是 JavaScript 原生格式,所以JavaScript 中处理 JSON 数据不需要任何特殊的 API 或工具包。 a.将 JSON 数据赋值给变量例如,可以创建一个新的 JavaScript 变量,然后将 JSON 格式的数据字符串直接赋值给它:var people = programmers: firstName: Brett, lastName:McLaughlin, email: aaaa , firstName: Jason, lastName:Hunter, email: bbbb , firstName: Elliotte, lastName:Harold, email: cccc ,authors: firstName: Isaac, lastName: Asimov, genre: science fiction , firstName: Tad, lastName: Williams, genre: fantasy , firstName: Frank, lastName: Peretti, genre: christian fiction ,musicians: firstName: Eric, lastName: Clapton, instrument: guitar , firstName: Sergei, lastName: Rachmaninoff, instrument: piano b.访问数据 上面的长字符串实际上只是一个数组,将这个数组放进 JavaScript 变量之后,就可以访问它。实际上,只需用点号表示法来表示数组元素。所以,要访问 programmers 列表的第一个条目的姓氏,只需在 JavaScript 中使用下面的代码:grammers0.lastName;所以,这行代码首先访问 people变量中的数据;然后移动到programmers的条目,再移动到第一个记录(0);最后,访问 lastName键的值。结果是字符串值 “McLaughlin”。下面是使用同一变量的几个示例。people.authors1.genre / Value is fantasypeople.musicians3.lastName / Undefined. This refers to the fourth entry, and there isnt grammers2.firstName / Value is Elliotte利用这样的语法,可以处理任何 JSON 格式的数据,而不需要使用任何额外的 JavaScript工具包或 API。 c.修改 JSON 数据可以按照点号和方括号访问数据的方式修改数据:people.musicians1.lastName = Rachmaninov;在将字符串转换为 JavaScript 对象之后,就可以修改变量中的数据。 d.转换回字符串在JavaScript中转换回字符串的代码如下:String newJSONtext = people.toJSONString();这样就获得了一个可以在任何地方使用的文本字符串,例如,可以将它用作 Ajax 应用程序中的请求字符串。可以将任何JavaScript 对象转换为JSON 文本。如果对名为 myObject的对象进行转换,只需执行相同形式的命令:String myObjectInJSON = myObject.toJSONString();这就是JSON与其他数据格式之间最大的差异。使用 JSON,只需调用一个简单的函数,就可以获得经过格式化的数据,就可以直接使用了。(5)基础示例 JSON可以将JavaScript对象中表示的一组数据转换为字符串,然后就在函数之间传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。而且JSON可以表示比名称 / 值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。 a.表示名称 / 值对可以用下面的JSON表示名称 / 值对: firstName: Brett 当将多个名称 / 值对串在一起时,JSON更容易使用,而且可读性更好。例如: firstName: Brett, lastName:McLaughlin, email: aaaa 它明确地表示以上三个值都是同一记录的一部分,花括号使这些值有了某种联系。 b.表示数组当需要表示一组值时,JSON可以提高可读性,而且可以减少复杂性。例如,要表示一个人名列表。使用JSON只需将多个带花括号的记录分组在一起: people: firstName: Brett, lastName:McLaughlin, email: aaaa , firstName: Jason, lastName:Hunter, email: bbbb, firstName: Elliotte, lastName:Harold, email: cccc 在这个示例中,只有一个名为 people的变量,值是包含三个条目的数组,每个条目是一个人的记录,其中包含名、姓和电子邮件地址。在处理JSON格式的数据时,不需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表示数据的方式,甚至可以以不同方式表示同一事物。2.4 Handler、Intent和监听器(1)Handler:主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程),主线程为管理界面中的UI控件,进行事件分发,比如说,要是点击一个 Button, Android会分发事件到Button上来响应操作。如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,不能把这些操作放在主线程中,如果放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示“强制关闭”。这个时候需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的。这个时候,Handler就可以解决这个问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。Handler可以分发Message对象和Runnable对象到主线程中,每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程),它有两个作用:安排消息或Runnable在某个主线程中某个地方执行;安排一个动作在不同的线程中执行。 Handler中分发消息的一些方法: post(Runnable) postAtTime(Runnable,long) postDelayed(Runnable long) sendEmptyMessage(int) sendMessage(Message) sendMessageAtTime(Message,long) sendMessageDelayed(Message,long) 以上post类方法允许排列一个Runnable对象到主线程队列中,sendMessage类方法,允许安排一个带数据的Message对象到队列中,等待更新。(2)Intent:协助android四种组件之间的通讯,负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。 在应用中,有两种形式来使用Intent: a.直接Intent:指定了component属性的Intent(调用setComponent(ComponentName)或者setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。 b.间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。 对于直接Intent,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是间接Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。 Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。在这个解析过程中,Android是通过Intent的action、type、category这三个属性来进行判断的,判断方法如下: 如果Intent指明定了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不能匹配;如果Intent没有提供type,系统将从data中得到数据类型。和action一样,目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配。如果Intent中的数据不是content类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者mailto: ) 进行匹配。如果Intent指定了一个或多category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类别。 Intent实例: 例1.无参数Activity跳转Intent it = new Intent(Activity.Main.this, Activity2.class);startActivity(it); 例2.向下一个Activity传递数据(使用Bundle和Intent.putExtras)Intent it = new Intent(Activity.Main.this, Activity2.class);Bundle bundle=new Bundle();bundle.putString(name, This is from MainActivity!);it.putExtras(bundle); / it.putExtra(“test”, shuju”);startActivity(it); / startActivityForResult(it,REQUEST_CODE); 对于数据的获取可以采用:Bundle bundle=getIntent().getExtras();String name=bundle.getString(name); 例3.向上一个Activity返回结果 Intent intent=getIntent(); Bundle bundle2=new Bundle(); bundle2.putString(name, This is from ShowMsg!); intent.putExtras(bundle2); setResult(RESULT_OK, intent); 例4.回调上一个Activity的结果处理函数(onActivityResult)Override protected void onActivityResult(int requestCode, int resultCode, Intent data) / TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (requestCode=REQUEST_CODE) if(resultCode=RESULT_CANCELED) setTitle(cancle); else if (resultCode=RESULT_OK) String temp=null; Bundle bundle=data.getExtras(); if(bundle!=null) temp=bundle.getString(name); setTitle(temp); (3)监听器:监听器是个抽象类,它包含了一个事件触发时系统会去调用的函数。在子类中,根据项目的需要重写这个函数,派生后的监听器需要绑定到按钮上。一般的情况是这个按钮可能需要这个监听器,而另外一个按钮需要另外一个监听器,每个监听器各司其职,但功能相似时,也可以多个按钮共同绑定一个监听器。各种控件,都有常用的事件,如点击按钮,拖动一个滚动条,切换一个ListView的选项等,绑定监听器的函数命名规则是setOn.Listener 。 当用户(也可能系统)触发某个控件的某个事件后,往往要处理一些细节,但他们不具有通用性,例如可能点击按钮后改变它的值,也可能希望点击按钮后弹出一个网页,或者点击按钮后关闭当前Activity。正由于结果可能太多样,设计者索性将实现完全留给Android开放者去实现,监听器其实是一种回调:它不需要去执行On.Listener,而是系统触发后自动会去调用它。以使用自定义内部类继承监听器抽象类,并实现抽象方法,也可以使用Java提供的抽象类的匿名实现。 监听器的实现方式有以下几种: 第一种,匿名内部类作为事件监听器类。大部分事件监听器只是临时使用一次,所以使用匿名内部类形式的事件监听器更合适。对于使用匿名内部类作为监听器的形式来说,唯一

温馨提示

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

评论

0/150

提交评论