击"关闭USB存储设备"按钮。
2. 进入"菜单",查找"文件管理"按钮,点击后查找刚放入的apk文件,点击该文件直接进入文件安装向导,根据向导提示点击"下一步"进行安装。文件安装成功后会在Android界面出现应用图标,点击该图标即可进入应用程序界面。
3. 点击"Android多线程文件下载器"图标打开应用程序,进入"新建下载任务"操作界面,在"连接地址"栏输入需要下载资源的文件地址,"文件名"为下载后的资源名称,默认可以为空。"开启线程数"默认为3个线程,一次下载任务需要多少个线程来共同下载资源。"保存位置"默认保存到手机内存卡里。
4. 当输入完连接地址后,点击"立即下载"按钮可以看到界面的进度条对文件的下载进度,在进度条的下方会出现文件下载进度具体值。当点击"菜单键"会出现三个菜单选项:暂停下载、关于、退出。"暂停下载"用来模拟断点续传的功能,点击"暂停下载"菜单项,进度条会停止前进,整个下载进度会暂时停止,这是如果手机网络状态不好或手机重启,应用程序会将当前线程下载的文件大小及下载地址分别根据线程数量保存到SQLLite数据表里面。当下次启动点击"继续下载"按钮后,进度条会立即初始化到上次文件下载的位置,继续在上次的位置下载文件资源,直至文件资源完全下载完成。
2.5 环境配置
开发本系统所需要的软硬件环境如下:
2.5.1 硬件条件
个人PC机:
1. CPU:奔腾4.0用其以上
2. 内存:1G及其以上
3. 基于Android系统的智能手机一部
2.5.2 软件条件
1. Windows Server 2003系统
2. Eclipse集成开发工具
3. Android SDK开发工具
3 系统设计
3.1 系统划分
通过对该系统需求的调查研究,确定系统应该有不同的表现形式,系统模块划分如下:
3.1.1 多线程下载设计
使用多线程下载文件可以更快完成文件的下载,多线程下载文件之所以快,
是因为其抢占的服务器资源多。如:假设服务器同时最多服务100个用户,在服务器中一条线程对应一个用户,100条线程在计算机中并非并发执行,而是由CPU划分时间片轮流执行,如果A应用使用了99条线程下载文件,那么相当于占用了99个用户的资源,假设一秒内CPU分配给每条线程的平均执行时间是10ms,A应用在服务器中一秒内就得到了990ms的执行时间,而其他应用在一秒内只有10ms的执行时间。就如同一个水龙头,每秒出水量相等的情况下,放990毫秒的水 肯定比放10毫秒的水要多。
多线程下载的实现过程:
(1) 首先得到下载文件的长度,然后设置本地文件的长度。
HttpURLConnection.getContentLength();
RandomAccessFile file = new RandomAccessFile("QQWubiSetup.exe","rwd");
file.setLength(filesize);//设置本地文件的长度
(2) 根据文件长度和线程数 计算每条线程下载的数据长度和下载位置。如:文件的长度为6M,线程数为3,那么,每条线程下载的数据长度为2M。
(3) 使用Http的Range头字段指定每条线程从文件的什么位置开始下载,下载到什么位置为止,如:指定从文件的2M位置开始下载,下载到位置(4M-1byte)为止,代码如下:
HttpURLConnection.setRequestProperty("Range", "bytes=2097152-4194303");
(4) 保存文件,使用RandomAccessFile类指定每条线程从本地文件的什么位置开始写入数据
RandomAccessFile threadfile = new RandomAccessFile("QQWubiSetup.exe ","rwd");
threadfile.seek(2097152);//从文件的什么位置开始写入数据
3.1.2 断点续传下载设计:
(1) 断点续传需要在下载过程中记录每条线程的下载进度
(2) 每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新记录插入数据库
(3) 在每次向文件中写入数据之后,在数据库中更新下载进度
(4) 下载完成之后删除数据库中下载记录
通过Handler传输数据查看下载进度:这个主要用来记录百分比,每下载一部分数据就通知主线程来记录时间,主线程中创建的View只能在主线程中修改,其他线程只能通过和主线程通信,在主线程中改变View数据。本人使用Handler可以处理这种需求,主线程中创建Handler,重写handleMessage()方法,新线程中使用Handler发送消息,主线程即可收到消息,并且执行handleMessage()方法。
3.1.3 界面设计
随着科技的不断发展,计算机与软件的进步,新一代的移动终端用户针对应用软件的可操作性以及软件操作的舒适性等方面提出了更高的要求。除期望所用的软件拥有强大的功能外,更期望应用软件能尽可能的为他们提供一个轻松、愉快、感觉良好的操作环境。这表明友好的手机界面设计已经成为手机应用开发的一个重要组成部分。而手机界面在手机应用软件中占用了大量的开发时间,提高手机界面的开发效率,无疑是提高整个手机应用软件开发效率非常有效的手段。 如果用户不满意在PC机端通过图片单纯模拟Android操作系统窗口组件的显示效果,可以将最终生成的XML界面程序发送至Android手机或Android模拟器端,通过Android应用程序对其进行解析,将界面显示出来。 该系统分为界面在PC机上的开发和界面在Android模拟器端显示两个部分。界面在PC机上的开发部分是基于MVC设计模式的总体框架设计的,该模块基本上是由界面组件、界面控制、组件属性和界面显示四个部分组成。界面组件和界面控制相当于MVC中的Model;组件属性和界面显示相当于MVC中的View;系统中负责组件和界面显示之间各种监听相当于MVC中的Control。界面在Android模拟器端显示模块实现了Android应用程序中的XML界面程序在Android模拟器上的显示。该模块将通过XML界面文件创建界面组件,通过解析XML资源文件为适配器提供信息,然后通过Android框架结构预定好的调用机制,将适配器中的信息填充到界面组件中[4]。
Android 应用程序组件包括4种实现: 活动(Activity)组件:Activity是Android的核心类,该类全名是android.app.Activity .Activity相当于C/S程序中的窗体Form或Web程序的页面。每一个Activity提供了一个可视化的区域。在这个区域可以放置各种Android组件,例如按钮、图像、文本框等。在Activity中有一个onCreate事件方法,一般在该方法中对Activity进行初始化。通过setContentView方法可以设置在Activity上显示的视图组件。服务(service)组件 :服务没有可视化接口,但可以在后台运行。每一个服务是一个android.app.Service的子类。 广播接收组件:广播接受者组件的唯一功能就是接收广播消息,以及对广播消息作出相应。有很多时候广播消息是由系统发出的。除此之外应用程序还可以发送广播,一个应用程序可以有很多个广播接收者,所有的广播接受者类都要继承android.content.BroadcastReceiver类。内容提供者组件:内容提供者可以为其它应用程序提供数据,这些数据可以保存在文件系统中,在ContentProvider类中定义了一系列的方法,通过这些方法可以使其它的应用程序获得和存储内容提供者所支持的数据。
Android多线程文件下载器的开发设计主要运用到了四种主要的组件:显示文本的组件TextView:TextView组件使用
标签定义,。输入文本的组件EditText: EditText是TextView类的子类,一次EditText组件具有TextView组件的一切XML属性及方法。EditText与TextView的区别是EditText组件可以输入文本,而TextView只能显示文本。EditText组件使用标签定义。当然EditText可以通过多种方式指定允许输入的字符,例如android:dig
上一篇:2014年成人英语三级(学士学位英语)真题及答案解析
下一篇:试论APP广告在手机中的应用