毕业设计(论文)-基于Android的断点续传下载软件.docx_第1页
毕业设计(论文)-基于Android的断点续传下载软件.docx_第2页
毕业设计(论文)-基于Android的断点续传下载软件.docx_第3页
毕业设计(论文)-基于Android的断点续传下载软件.docx_第4页
毕业设计(论文)-基于Android的断点续传下载软件.docx_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

中北大学信息商务学院2013届毕业设计说明书毕业设计说明书断点续传下载软件学生姓名: 学号: 学 院: 系 名: 专 业: 指导教师: 2013 年 05月第III页 共页基于Android的断点续传下载软件摘要:现在人类已经迈进信息化时代,网络通信体现在各个领域,怎样充分利用网络带宽获得最快的下载速度,从而达到时空和效率的统一是信息化时代的必然趋势。现在人们之间的文件传输越来越频繁,数据在传送的过程中可能因为网络中断或断电而中断文件传输。为了应对这些突发事件,开发了支持断点续传的下载软件,从而避免了资源的浪费并且加快了下载速度。随着载有Android系统的移动终端设备的销量在世界范围内持续高涨,基于Android平台开发移动终端应用软件正成为一种趋势。本文在Android手机终端利用 HttpClient 编程实现客户端/服务器模式的文件传输,开发了多文件同时传输以及支持断点续传的高效传输软件与方法。本课题具体的研究内容是实现在传输文件中途被中断,以继续下载的方法,继续下载时计算出已下载的数据量,并记录连续传输的断点位置用于从断点开始下载。当文件下载过程中出现断电或者网络被切断或者应用程序崩溃,并造成下载失败,基于移动终端再进行传输的过程,可以自动识别不完整的文件并继续下载。关键词:Android,移动终端,断点续传,下载,HttpClientThe transmission resuming at break-points Software For AndroidAbstract: Human has entered the information age, the network communication is reflected in the various fields. The inevitable trend of the information age is how to make a full use of network bandwidth to get the fastest download speed, so as to reach the unity of time and space and efficiency. Now the file transfer between people become more and more frequently, however, the file transfer may be interrupted by some accident, such as network interrupter computer power failure. In order to respond to these emergencies, this article develop a download software with the functions of broken-point continuingly transfer, this download software can accelerate download speed, at the same time avoid the waste of resources. As an impact of the continuously increasing sale volume of mobile terminal devices using Android system, designing mobile terminal applications based on Android platform has become a trend.In this paper, we take Httpclient-programming to accomplish Client/Server model File Transfer System and develop multiple files transferring simultaneously to support transmission resuming at break-points efficient software and methods,The invention claims a method for realizing transmission resuming at break-points of incremental data migration method similar to the method for transmitting file breakpoint continuous transmission realizing the surface of object and records the position of breakpoint continuous transfer.When the data migration in the process of generating system dead halt of power cut off the network system or application program collapse and so on caused by migration failure re-carry out transferring process is based on the method of the moving tool can identify automatically the complete and does not finish the transfer service in the break point to start to continue moving.Keywords: Android, mobile terminal, breakpoint continuous transmission, download, HttpClient目录1 引言11.1 课题的研究背景与意义11.1.1 课题的研究背景11.1.2 断点续传技术22 需求分析42.1 用户需求分析42.2 业务流分析52.3 技术可行性分析52.4 本文研究的内容53 系统的开发技术及运行环境63.1 开发技术和工具63.1.1 Eclipse63.1.2 Android SDK63.1.3 ADT73.1.4 Httpclient73.2 Java的语言特性73.3 HTTP协议83.4 运行环境94 系统设计104.1 系统设计要点104.2 系统设计的目标104.3 结构化设计104.3.1 系统功能模块划分设计114.3.2 系统流程图124.4 面向对象的设计124.4.1 程序类图134.5 Android软件技术144.5.1 布局模式144.5.2 ViewHolder 模式154.5.3 AsyncTask执行异步方法165 系统实现175.1 系统实现175.2 资源文件与界面布局175.3 包结构定义205.4 核心功能实现205.4.1 断点请求数据205.4.2 文件随机读写235.4.3 流量计算245.4.4 配置文件存储256 结束语27参 考 文 献28致 谢291 引言在科学技术飞速发展的今天,计算机科学及手机互联网日渐成熟,其强大的功能已为人们深刻认识,它已经进入人类社会的各个领域并发挥着越来越重要的作用。几乎每个人都有使用过迅雷或者qq旋风从网络下载文件的经历,这些软件的使用可以大大加速互联网上文件的传输速度,减少文件传输的时间,如果之前没下载完成、或者因为网络原因中断的下载的文件可以继续下载,将大大提高用户使用软件的满意度。而现在很多软件的网上自动升级,包括微软的自动更新,也都可以从上次没下载完的地方接着再下载。这些软件都采用了断点续传技术,这为人们节省了不少时间和资源。随着3G时代的来临,手机凭借着其携带方便、即时通信的特点成为人们当今生活中不可或缺的一个部分,而手机所具有的网络特点:无线通讯容易收干扰,移动过程中基站的变换、2G/3G和wifi网络的切换使得网络的连续性、稳定性变得相对较差。于是在下载过程中,断点续传成为了必不可少的功能。1.1 课题的研究背景与意义1.1.1 课题的研究背景以往我们开发的程序大多是单线程的,即一个程序只有一条从头至尾的执行线索。然而现实世界中的很多过程都可以从中断处继续接着运行,类似人们的生活,如果手头正在做的事情被打断,在做完别的事情之后可以回头接着做刚才没有完成的事情,如此才符合正常生活情景。Android,中文称安卓,是一个以Linux为基础的半开放原始码作业系统,主要用于移动设备,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中。Android系统最初由安迪.鲁宾(Andy Rubin)开发制作,并于2005年8月被Google收购。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商成立OHA来共同研发改良Android系统。随后,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。让生产商推出搭载Android的智能手机,Android作业系统后来更逐渐拓展到平板电脑及其他领域上1。第一部Android智能手机发布于2008年10月。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。目前,全球手机用户数已超过了PC机用户数,其中智能手机的比例越来越高。智能手机是指像电脑一样可以通过下载、安装软件来拓展基本功能的手机,一般具有智能手机操作系统。相较于非智能手机,它功能更强,处理速度更快。基于Linux的Android手机操作系统,由于具有开源、免费的特性,迅速得到广大爱好者及厂商的支持。目前,移动应用软件中的手机游戏开发是一项非常热门的技术。Android系统对第三方软件是开放的,这促进了第三方软件的发展。Android系统以Linux 2.6为核心,其安全机制比较完善,增强了手机使用的安全性。Android平台已经形成由 Google牵头,OHA组织参与,系统支持商和服务供应商完善搭配的运作机制,为Android平台的快速发展提供了坚实的基础2。Android手机终端开发的一大好处就是继承扩充了Java语言,其中一大特性就是内置对多线程的支持。多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。虽然执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,因为我们的计算机在任何给定的时刻只能执行那些线程中的一个。为了建立这些线程正在同步执行的感觉。Java快速地把控制从一个线程切换到另一个线程。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上的“同时”。如果系统只有一个CPU,那么真正的“同时”是不可能的,但是由于CPU的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需要设想各个线程是同时执行即可。因为此次的重点是研究手机端的断点续传功能,所以只实现了队列中多个进程同时运行,而没有实现同一个任务的多线程下载。1.1.2 断点续传技术在当今的互联网时代,下载软件是使用最为频繁的软件之一。几年来,下载技术也在不停地发展。最原始的下载功能仅仅是个“下载过程”,即从WEB服务器上连续地读取文件。其最大的问题是,由于网络的不稳定性,一旦连接断开使得下载过程中断,就不得不全部从头再来一次,比如IE浏览器,以及目前几乎所有手机端自带的下载器3。随后,“断点续传”的概念就出来了,顾名思义,就是如果下载中断,在重新建立连接后,跳过已经下载的部分,而只下载还没有下载的部分。自从“多线程下载”技术发明以来,这项技术得到前所未有的关注已是不争的事实。自从“网络蚂蚁”软件流行开后,许多下载软件也都纷纷效仿。本课题研究的就是基于此背景下Android手机的断点下载功能,该软件主要分为前台下载控制模块,以及后台下载服务两个模块。核心功能通过Apache Jakarta Commons下的子项目HttpClient包对Http协议进行支持,从而下载服务器端的资源。程序提供多线程断点续传功能,在完成下载过程中使用多线程技术可以较大幅度地提高下载的速度。“断点续传下载”的基础是WEB服务器支持远程的随机读取,目前,网络上几乎所有的服务器都支持这样的请求。这样,在下载时可以请求文件的一部分,即使被中断下载也不用担心。通过该软件的设计,将自己学到的java、android方面的理论知识应用于实践,提高自己的实践编程能力。2 需求分析2.1 用户需求分析随着手机互联网的不断发展,进入3G时代后从手机互联网快速获得网络共享资源成为很简单的事情,人们对手机终端也有了很大的依赖性。原先人们需要在电脑端点击鼠标才可以得到自己想要的东西,现在甚至连个人电脑都不用打开,直需要动动手指就能完成。比如,人们想要浏览新闻,必须先开启电脑,打开浏览器,再打开新闻网站才能看到,当没有计算机的时候便不能完成;还有很多的人希望能过下载到他们喜欢听得音乐、喜欢的电影等等。随着手机网络以及3G技术的发展,也可以看出人们在上网时再也不单是打开浏览器来浏览网页,越来越多的人们开始在手机端使用APP获取信息,或者打开下载软件来获取资源。由于用户下载需求的增大,也要求下载软件能够迅速完成对资源的下载。多线程程序设计可以很好的解决程序并发的问题。最恰当的比喻就是用户会感到软件很智能的正在下载多个文件,其中的并发控制将使下载的效率大大提高。由于下载资源是一个过程,当中用到的时间可能会很长。那么在很长的这段时间中很有可能会出现很多的意外情况使下载中断或是停止,比如手机电量不足、网络中断、或是手机系统的故障导致应用程序的关闭。这些原因都会导致下载的中断,但是当用户重新下载资源时发现原来下载的数据已经消失你还是要回头再来,尤其在当前手机端不是无限流量的情况下所造成的用户体验非常糟糕。断点续传就是用来解决这样的问题的,它的任务是在下载任务停止时,记录当前下载的信息并且利用网络协议中的一些重定向机制继 续完成下载任务而不必从头再来。在下载任务的管理这一块,用户在下载任务开始后由于种种原因希望放弃资源的下载,这就要求下载工具具有删除任务的功能了。用户在使用网络软件时,最关心的莫过于手机端流量的使用情况,在PC端,用户通常都是使用包月的有线网络,下载程序通常一直运行,而仅仅在几年之前,手机网络速度根本不足以完成下载所需的速度,在手机3G技术发展几年之后,加之各大运营商也在积极推广WIFI部署,手机端流量,以及网络情况得到很大的改观,不过手机端鉴于手机电量使用情况,还是有必要让程序尽量精简与透明。2.2 业务流分析断点续传的业务流程:首先由用户进入软件系统,在界面上点击添加下载就可以开始填写需要下载的信息,资源下载地址URL。由软件发送HTTP消息请求,然后服务器根据请求返回响应消息。确认无误就可以启动线程开始下载资源,以便在用户执行操作。下载时将设计一个下载临时文件,放置在下载过程中频繁的操作手机闪存卡,存储的数据最终存储到目的存储路径。此外,系统为用户提供了一些对任务的基本功能,比如,暂停、继续、删除、流量统计速度显示等。2.3 技术可行性分析Android系统平台是一个基于Linux开源的手机操作系统。它由Google公司在2007年11月5日正式发布的。Android平台是由操作系统、中间件、界面和应用软件组成。是第一个要为移动终端创造的一款真正开放的完整的操作系统。说道Android操作系统平台的优势,不得不提到最突出的两个特点“免费”和“开源”。 免费:Android免费提供其操作系统,让移动过电话制造商可以免费搭载Android操作系统,使得手机的制作成本大大降低,渐渐使得Android普及。开源:Android手机制作操作系统代码的开放性,不仅让开发者可以在统一开放平台进行程序开发,而且可以解决现今市场不同智能机之间因文件格式不同造成的信息交流不便、程序内容无法移植等问题;并且Android的开机源码就意味着手机使用者不必在被动地接受移动电话制造商默认的设施和环境,使用者完全可以根据自己的想法自定义手机的配置。随着手机的发展与普及,以及互联网技术的扩展,人们对移动通讯的需求必将需要实现多元功能化。通过移动通讯连接到Internet上,实现数据,应用等资源共享。提高了数据的资源利用,并能及时的到更新4。2.4 本文研究的内容本程序主要研究断点续传在android手机端的实现,让用户可以在手机终端也能体验到断点续传下载功能。3 系统的开发技术及运行环境针对不同的应用平台我们要选择合适的设计工具,采用更为有效实用的技术。本设计选择当今应用较流行的Eclipse开发环境,因为Android系统良好的向后兼容性,程序理论上可以在任何版本的Android手机上运行。3.1 开发技术和工具3.1.1 EclipseEclipse是著名的跨平台开源集成开发环境(IDE)。最初主要用来Java语言开发,目前亦有人通过插件使其作为C+、Python、PHP等其他语言的开发工具。Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如C/C+、COBOL、PHP等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect,它构成了 IBM Java 开发工具系列的基础。3.1.2 Android SDKSDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。因此,Android SDK 指的是Android专属的软件开发工具包。3.1.3 ADTAndroid Development Tools在Eclipse编译IDE环境中,需安装ADT(Android Development Tools)Plug-in,这是Android在Eclipse上的开发工具。目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具。3.1.4 HttpclientHTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。3.2 Java的语言特性Java之所以被开发,是要达到以下五个目的: 应当使用面向对象程序设计方法学 应当允许同一程序在不同的计算机平台执行 应当包括内建的对计算机网络的支持 应当被设计成安全地执行远端代码 应当易于使用,并借鉴以前那些面向对象语言(如C+)的长处1 面向对象Java的特点之一就是面向对象,是程序设计方法的一种。“面向对象程序设计语言”的核心之一就是开发者在设计软件的时候可以使用自定义的类型和关联操作。代码和数据的实际集合体叫做“对象”。一个对象可以想像成绑定了很多“行为(代码)”和“状态(数据)”的物体。对于数据结构的改变需要和代码进行通信然后操作,反之亦然。面向对象设计让大型软件工程的计划和设计变得更容易管理,能增强工程的健康度,减少失败工程的数量。2 跨平台性Java语言的第二个特性就是跨平台性,也就是说使用Java语言编写的程序可以在编译后不用经过任何更改,就能在任何硬件设备条件下运行。这个特性经常被称为“一次编译,到处运行”。3 自动垃圾回收C+语言被用户诟病的原因之一是大多数C+编译器不支持垃圾收集机制。通常使用C+编程的时候,程序员于程序中初始化对象时,会在主机存储器堆栈上分配一块存储器与地址,当不需要此对象时,进行解构或者删除的时候再释放分配的存储器地址。如果对象是在堆栈上分配的,而程序员又忘记进行删除,那么就会造成存储器泄漏(Memory Leak)。长此以往,程序运行的时候可能会生成很多不清除的垃圾,浪费了不必要的存储器空间。4 接口和类别Java的设计者们不想让Java有多重继承的特性,因为C+的多重继承显示了这种特性的困难。Java的接口功能可以提供同样的功能,但是又不会很复杂。5 应用程序开发接口在Java语言中,应用程序接口(API)化身成类,并且分组成为包。每个包中包含有相关的接口和类。对于不同的平台,Java提供了不同版本的包。API的设定由sun公司和其他公司通过JCP(Java社区程序)决定。3.3 HTTP协议HTTP(HYPERTEXT TRANSFER PROTOCOL,超文本传输协议)是WEB协议集中的重要协议,用来在INTERNET上传送超文本的传送协议。它是从客户机/服务器模型发展起来的5。客户机/服务器是运行一对相互通信的程序,客户与服务器连接时,首先,向服务器提出请求,服务器根据客户的请求,完成处理并给出响应。浏览器就是与WEB服务器产生连接的客户端程序,它的端口为TCP的80端口6。WEB的应用层协议是HTTP,它是WEB的核心7。HTTP使用TCP(而不是UDP)作为它的支撑运输层协议8。TCP为HTTP提供可靠数据传输服务。这意味着,一个客户机进程发出的每个HTTP请求报文最终都能完整地到达服务器;类似地,服务器进程发出的每个HTTP响应报文最终也能完整地到达客户机9。从这里我们看到了分层体系结构最大的优点,即HTTP协议不用担心数据丢失,也不用担心TCP是如何从网络的数据丢失和乱序故障中恢复的,那是TCP以及协议栈底层协议的工作10。3.4 运行环境(一)开发环境操作系统:Microsoft Windows 7、Archlinux开发语言:javaIDE: Eclipse Juno(二)测试环境AVD 模拟器 version: android 2.3.3Sony Ericsson ST18i version: android 4.0.44 系统设计4.1 系统设计要点软件需求分析阶段已经完全弄清楚了软件的各种需求,较好地解决了所开发的软件“做什么”的问题,下一步要着手对软件系统进行设计,也就是开率应该“怎么做”的问题。软件设计是软件项目开发过程的核心,需求规格说明书是软件设计的重要输入,也为软件设计提供了基础,软件设计过程是将需求规格说明转化成一个软件实现方案的过程。经过需求分析阶段的工作,断点续传下载软件必须“做什么”已经清楚了,现在是决定“怎样做”的时候了。其具体的任务就是进行概要设计,确定解决问题的策略和实现目标系统的各种功能的方案,确定软件的模块组成以及模块之间的相互关系。本系统设计的基本目标就是利用编写一个流行的基于Http协议的断点续传的程序来研究Android手机端多线程与并发、广播、进程间通讯机制。设计原则:该软件的要求不高,安卓平台和安卓手机都可以运行,即要求操作系统为android,UI简洁美观,功能明确。因为主要功能以断电下载为主,UI设计地相对朴素,要突出软件下载功能,应使用给人赏心悦目之感。4.2 系统设计的目标本系统主要实现以下目标:(1)程序核心采用类似C/S(客户端/服务器)架构,用户界面充当客户端,后台下载服务作为服务器端,下载与管理责任分离,降低耦合度。(2)人性化设计。程序设计充分考虑用户的感受,使操作简单方便快捷,界面友好,功能实用。(3)加入流量统计模块,使用户更了解软件使用中流量的使用情况。4.3 结构化设计 结构化设计的关键思想是同构划分独立的模块来减少程序设计的复杂性,并且增加软件的可重用性,以减少开发和维护计算机程序的费用。采用这种方法构筑的软件,其组成清晰、层次分明、便于分工协作,而且容易调试和修改,是系统研制较为理想的工具。4.3.1 系统功能模块划分设计用户进入软件后,首先看到主界面。如果当前有未完成的下载,程序会根据下载临时文件计算出已经下载的文件大小并接着下载。选择添加下载后,会弹出一个询问框,为了方便测试,会随机出几个下载地址,点击“下载”按钮,程序会自动开始下载。若点击“流量统计”按钮,则会启动一个界面显示当前软件的下载状态。图4.1 功能类模块划分图通过对多线程断点续传下载软件的需求分析并结合实际情况的分析,本系统由两个可见UI activity类,四个相关服务类模块,以及若干工具类构成。其中DownloadListActivity模块是最重要的模块,是整个程序的入口,程序开启时整个程序的初始化都由此模块完成,包括建立各个功能之间的连接、启动后台服务、监听下载进度等。DownloadService是在系统后台的服务,能在应用程序界面退出之后仍能保持运作,接收有用户界面发送来的信息,管理下载,在其中维护一个DownloadManager对象。DownloadManager管理模块主要功能是一个管理下载线程队列,并且提供队列中下载线程的管理功能,线程队列数据结构由内部类完成,队列内容DownloadTask队列集合。4.3.2 系统流程图图4.2 系统流程图4.4 面向对象的设计 对象是真实世界映射到软件领域的一个构件,当用软件来实现对象时,对象由私有的数据结构和操作过程组成,操作可以合法地改变数据结构。面向对象的设计方法表示出所有的对象类以及相互之间的关系。高层描述每个对象类,然后(低层)描述对象的属性和活动,描述各个对象之间关联关系。面向对象是很重要的一个软件开发方法,它将问题和解决方案通过不同的对象集合在一起,包括对数据结构和影响操作方法的描述。面向对象的设计(OOD)将面向对象分析方法建立的(需求)分析模型转化为构造软件的设计模型。面向对象的设计结果是产生大量的不同级别的模块,一个主系统级别的模块组成许多的子系统级别的模块数据核对数据操作的方法封装在一个对象中,这个对象就是前面提到的模块,这些模块共同构成了面向对象系统。另外面向对象的设计还要对数据的属性和相关操作进行详细描述。在此我们使用UML来描述工作流程。4.4.1 程序类图类图是静态图的一种,他描述系统中类的静态结构。类图不仅定义系统中的类,表示类之间的关系如关系、依赖、聚合等,也包括类的内部结构(类的属性和操作)。类图包括三个部分:类、用户接口、联系。类是面向对象模型的最基本的模型元素。以下展示了整个项目的类图。4.3程序类图4.5 Android软件技术与普通Java应用不同,Android软件设计中有些独有的功能、设计模式。4.5.1 布局模式Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。一、FrameLayout这个布局可以看成是墙脚堆东西,有一个四方的矩形的左上角墙脚,我们放了第一个东西,要再放一个,那就在放在原来放的位置的上面,这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比较简单的东西。二、LinearLayout线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局 (android:orientation=vertical)和水平布局(android:orientation=horizontal )。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。linearLayout中有一个重要的属性 android:layout_weight=1,这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。三、AbsoluteLayout绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x=20px android:layout_y=12px 这种布局方式也比较简单,但是在垂直随便切换时,往往会出问题,而且多个元素的时候,计算比较麻烦。四、RelativeLayout相对布局可以理解为某一个元素为参照物,来定位的布局方式。五。TableLayout表格布局类似Html里面的Table。每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他的对齐方式 android:gravity= 。每一个布局都有自己适合的方式,另外,这五个布局元素可以相互嵌套应用,做出美观的界面。4.5.2 ViewHolder 模式在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) 方法中进行的(要自定义listview都需要重写listadapter:如BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。一、首先创建viewHolderprivate class ViewHolder TextView tv_type; TextView tv_date; TextView tv_body; 二、使用viewHolder来寻找控件holder = new ViewHolder();holder.tv_type = (TextView) view.findViewById(R.id.tv_type);holder.tv_date = (TextView) view.findViewById(R.id.tv_date);holder.tv_body = (TextView) view.findViewById(R.id.tv_body);三、填充数据holder = (ViewHolder) view.getTag();/绑定数据到控件holder.tv_type.setText(typeId);holder.tv_date.setText(dateStr);holder.tv_body.setText(body);4.5.3 AsyncTask执行异步方法Android进程中,UI主线程执行时候阻塞时间不能太长,否则系统会认为程序异常,而为了线程安全,UI界面调整又必须在主线程中进行,Android提供了AsyncTask类库帮助开发。AsyncTask是抽象类.AsyncTask定义了三种泛型类型 Params,Progress和Result。Params 启动任务执行的输入参数,比如HTTP请求的URL。Progress 后台任务执行的百分比。Result 后台执行任务最终返回的结果,比如String。AsyncTask的执行分为四个步骤,每一步都对应一个回调方法,这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。1) 子类化AsyncTask2) 实现AsyncTask中定义的下面一个或几个方法onPreExecute(), 该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。doInBackground(Params.), 将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。onProgressUpdate(Progress.),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。onPostExecute(Result), 在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.5 系统实现5.1 系统实现 下载程序的主界面设计使用了Android界面静态界面xml文件格式书写。在Activity类中的onCreate(Bundle savedInstanceState) 方法中调用setContentView(R.layout.main_activity),实现界面布局11。代码如下:Overridepublic void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.download_list_activity);5.2 资源文件与界面布局Android的每一个可视化界面,都有其唯一的布局配置文件,该文件中有各种布局的方式,和各种资源文件如图像,文字,颜色引用等,程序在运行时可以通过代码对各个配置文件进行读取,这样可以形成不同的可视化界面效果。界面的绘制通常是在xml文件中完成,同时也会用到各种控件如:TextView,Button,ImageView。当然说道控件,容器就不得不提了,两者息息相关。本设计中用到了最常用的LinearLayout容器,全部写在了每个Activity对应的xml文件中。资源则有一个作为程序图标(LOGO)的图形文件。5.1资源文件上图为程序资源文件,drawable-hdpi中是所有图形文件,包括一个程序图标,以及一个下载状态标识图。Layout中分别是下载界面的布局文件,以及流量统计界面的布局文件。xml文件夹中button.xml是由自己定义的软件按钮图形。主界面在download_list_activity.xml文件中布局,该界面采用LinearLayout布局,在LinearLayout标签书写界面设置。主界面中每个现在条目存放的控件叫做ListView,在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。部分代码如下本应用由下载界面、流量统计界面界面组成。5.2 界面视图5.3 包结构定义图5.3 包结构定义Activity: 手机端可以显示界面类Error: 定义程序运行过程中抛出的异常。Services: 程序所有后台运行的服务。Utils: 网络检测,存储器状态检测,常量定义等工具类。Widgets:ListView: 中填充内容Adapter、ViewHolder定义。5.4 核心功能实现5.4.1 断点请求数据其实断点续传的原理很简单,就是在 Http 的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下12:假设服务器域名为 ,文件名为 down.zip。GET /down.zip HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*Accept-Language: zh-cnAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)Connection: Keep-Alive服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下13:200Content-Length=106786028Accept-Ranges=bytesDate=Mon, 30 Apr 2001 12:56:11 GMTETag=W/02ca57e173c11:95bContent-Type=application/octet-streamServer=Microsoft-IIS/5.0Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给 Web 服务器的时候要多加一条信息 - 从哪里开始。下面是用自己编的一个浏览器来传递请求信息给 Web 服务器,要求从 2000070 字节开始。GET /down.zip HTTP/1.0User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0RANGE: bytes=2000070-3200050Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2仔细看一下就会发现多了一行 RANGE: bytes=2000070-3200050这一行的意思就是告诉服务器 down.zip 这个文件从 2000070 字节开始传,前面的字节不用传了。服务器收到这个请求以后,返回的信息如下:206Content-Length=106786028Content-Range=bytes 2000070-106786027/106786028Date=Mon, 30 Apr 2001 12:55:20 GMTETag=W/02ca57e173c11:95bContent-Type=applicati

温馨提示

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

评论

0/150

提交评论