一种基于安卓系统的多线程断点续传下载系统及方法与流程

文档序号:15497927发布日期:2018-09-21 22:03阅读:185来源:国知局

本发明涉及移动互联网技术领域,特别涉及一种基于安卓系统的多线程断点续传下载系统及方法。



背景技术:

安卓作为两大移动平台之一,占领了大部分移动市场。互联网创业中以移动互联网势头最烈,各类app层出不穷。其中,视频、音乐类app必然需要支持多任务同时下载,而在大部分框架中,并未提供类似功能,导致其开发周期和成本增高,也许因此错过业务发展的良好时机。



技术实现要素:

本发明的目的是克服上述背景技术中不足,提供一种基于安卓系统的多线程断点续传下载系统及方法,主要通过线程池,sqlite来实现,在需要下载功能时可直接调用现成的下载服务,从而专注业务的快速开发,降低了人力时间成本。

为了达到上述的技术效果,本发明采取以下技术方案:

一种基于安卓系统的多线程断点续传下载系统,包含后台服务模块、任务下载模块、线程下载模块、数据库模块及消息通知模块;

所述后台服务模块用于开启初始线程,并在初始线程里对任务下载模块进行初始化设置,后台服务模块与任务下载模块相连,任务下载模块用于确定下载任务的相关数据并通过线程下载模块开启多线程进行文件下载,任务下载模块与线程下载模块相连;

所述数据库模块用于实时记录下载进度,消息通知模块则用于定时进行界面刷新,数据库模块分别与任务下载模块、线程下载模块及消息通知模块相连;

其中,后台服务模块是以android里的service为原型,其运行在后台,数据库模块则是以sqliteoperhelper的helper类,用于连接数据库到接口可记录保存对数据表的具体操作,如增、删、改、查等,任务下载模块主要负责初始化相关数据和定时任务,线程下载模块则主要负责完成下载任务,消息通知模块主要负责接收不同通知消息并使用notificationmanager来实现通知显示、取消、更新进度条以及根据下载任务的状态显示不同提示词,如暂停中、下载失败等;

该基于安卓系统的多线程断点续传下载系统工作时,主要是:先由用户进行开启下载任务、暂停任务、删除任务的操作,其中,用户进行任一操作时均调用后台服务模块传入对应参数;然后,后台服务模块通过线程池开启初始线程,再由初始线程连接网络文件判断下载任务的可行性,并由此向服务的handler发送下载失败或下载开始消息;

若后台服务模块的handler收到下载失败的消息则通过消息通知模块发送下载失败广播,且该流程结束;

若后台服务模块的handler收到下载开始消息则启动任务下载模块并向数据库中下载任务数据表插入数据;

任务下载模块被启动后首先向数据库中线程数据表查询是否有对应数据,没有则创建多个线程数据并插入线程数据表;

然后根据这些线程数据启动多个下载线程,并且启动定时任务,每n秒通过消息通知模块发送下载更新广播。

同时,本发明还公开了一种基于上述的基于安卓系统的多线程断点续传下载系统的多线程断点续传下载方法,具体包含以下步骤:

s1.后台服务模块以后台服务的方式开启初始线程,并在初始线程里初始化任务下载模块,确定下载任务的相关数据;

s2.通过线程下载模块开启多线程进行文件下载;

s3.数据库模块对所述步骤s2中的下载进度进行实时记录,并通过消息通知模块定时进行界面刷新。

进一步地,还包含:

s4.当用户暂停或者终止当前下载任务时,数据库模块记录当前下载进度并保存已下载数据;

s5.当用户恢复下载时,任务下载模块及线程下载模块根据数据库模块记录的下载进度继续下载任务。

进一步地,所述步骤s1中后台服务模块以后台服务的方式开启初始线程时具体包含以下步骤:

s110.后台服务模块通过线程池开启初始线程并连接网络获取云端文件长度;

s111.后台服务模块判断收到的云端返回的数据是否正确;

s112.若收到的云端返回的数据错误,后台服务模块则向handler发出下载失败的消息,handler收到下载失败消息后即通过消息通知模块发出下载失败的通知;

s113.若收到的云端返回的数据正确,后台服务模块则进一步判断本地下载路径是否存在,不存在则创建相关下载路径并进入步骤s15;

s114.后台服务模块在本地创建文件设置下载长度,并向handler返回开始下载的消息;

s115.handler收到消息后,把下载任务加到数据库模块并用后台服务模块开启下载,同时通过消息通知模块发出下载开始的通知。

进一步地,所述数据库模块中设有用于记录下载数据的下载任务数据表,在所述步骤s115中,handler把下载任务加到数据库模块时具体为向数据库模块中的下载任务数据表中添加插入与本次下载任务相对应的下载数据。

进一步地,所述数据库模块中设有用于记录各线程下载情况的线程数据表,步骤s1中:后台服务模块在初始线程里初始化任务下载模块时具体包含以下步骤:

s120.任务下载模块查询线程数据表内数据,判断相关线程信息是否存在;

s121.如果相关线程信息不存在,任务下载模块则计算单个线程下载长度并创建各个线程信息,再向线程数据表插入创建的各个线程信息;

如果相关线程信息存在,任务下载模块则通过线程池启动多个下载线程进行文件下载;

s123.启动定时任务,任务下载模块每n秒向消息通知模块发送包含下载更新数据的消息,并通过消息通知模块更新下载进度,其中,所述下载更新数据包括下载进度及下载速率。

进一步地,所述步骤s2线程下载模块开启多线程进行文件下载时,还包含以下步骤:

s21.线程下载模块开启多线程进行文件下载后设置云端url上资源下载范围,并设置本地文件写入位置;

s22.线程下载模块开始下载,读取下载数据并写入本地文件;

s23.若用户暂停当前下载任务,则停止下载,更新线程数据表内数据,通过消息通知模块发送下载暂停的消息;

s24.若当前下载任务失败,则将线程数据表内的对应数据条的下载进度及下载速率清空,并通过消息通知模块发送下载失败的消息;

s25.若当前下载任务完成,则检查本下载任务的所有下载线程是否都完成,如果是,删除线程数据表对应数据,更新下载任务数据表对应数据,通过消息通知模块发送下载完成的消息。

本发明与现有技术相比,具有以下的有益效果:

本发明针对部分有多任务同时下载需求的androidapp,创新地提出了一种基于多线程实现的、支持断点续传的下载方法,并将其抽离为一个独立的模块,使用时只需要在androidapp里集成相关模块,即可直接调用相关方法进行下载任务,便于维护,同时。还向androidapp开发者们提供了多种灵活的下载方式,降低了下载模块的开发成本。

附图说明

图1是本发明的多线程断点续传下载方法中开始下载前的步骤流程示意图。

图2是本发明的多线程断点续传下载方法中开始下载后的步骤流程示意图。

具体实施方式

下面结合本发明的实施例对本发明作进一步的阐述和说明。

实施例:

实施例一:

一种基于安卓系统的多线程断点续传下载系统,包含后台服务模块、任务下载模块、线程下载模块、数据库模块及消息通知模块。

所述后台服务模块用于开启初始线程,并在初始线程里对任务下载模块进行初始化设置,后台服务模块与任务下载模块相连,任务下载模块用于确定下载任务的相关数据并通过线程下载模块开启多线程进行文件下载,任务下载模块与线程下载模块相连;

所述数据库模块用于实时记录下载进度,消息通知模块则用于定时进行界面刷新,数据库模块分别与任务下载模块、线程下载模块及消息通知模块相连;

其中,后台服务模块是以android里的service为原型,其运行在后台,数据库模块则是以sqliteoperhelper的helper为原型,用于连接数据库到接口可记录保存对数据表的具体操作,如增、删、改、查等,任务下载模块主要负责初始化相关数据和定时任务,线程下载模块则主要负责完成下载任务,消息通知模块主要负责接收不同通知消息并使用notificationmanager来实现通知显示、取消、更新进度条以及根据下载任务的状态显示不同提示词,如暂停中、下载失败等。

本发明的基于安卓系统的多线程断点续传下载系统工作时,主要是:先由用户进行开启下载任务、暂停任务、删除任务的操作,其中,用户进行任一操作时均调用后台服务模块传入对应参数;然后,后台服务模块通过线程池开启初始线程,再由初始线程连接网络文件判断下载任务的可行性,并由此向服务的handler发送下载失败或下载开始消息;

若后台服务模块的handler收到下载失败的消息则通过消息通知模块发送下载失败广播,且该流程结束;

若后台服务模块的handler收到下载开始消息则启动任务下载模块并向数据库中下载任务数据表插入数据;

任务下载模块被启动后首先向数据库中线程数据表查询是否有对应数据,没有则创建多个线程数据并插入线程数据表;

然后根据这些线程数据启动多个下载线程,并且启动定时任务,每n秒通过消息通知模块发送下载更新广播。

实施例二:

一种基于实施例一的多线程断点续传下载系统的多线程断点续传下载方法,具体包含以下步骤:

s1.后台服务模块以后台服务的方式开启初始线程,并在初始线程里初始化任务下载模块,确定下载任务的相关数据;

s2.通过线程下载模块开启多线程进行文件下载;

s3.数据库模块对所述步骤s2中的下载进度进行实时记录,并通过消息通知模块定时进行界面刷新;

s4.当用户暂停或者终止当前下载任务时,数据库模块记录当前下载进度并保存已下载数据;

s5.当用户恢复下载时,任务下载模块及线程下载模块根据数据库模块记录的下载进度继续下载任务。

如图1所示,开始下载前,后台服务模块以后台服务的方式开启初始线程时,具体包含以下步骤:

s110.后台服务模块通过线程池开启初始线程并连接网络获取云端文件长度;

s111.后台服务模块判断收到的云端返回的数据是否正确;

s112.若收到的云端返回的数据错误,后台服务模块则向handler发出下载失败的消息,handler收到下载失败消息后即通过消息通知模块发出下载失败的通知;

s113.若收到的云端返回的数据正确,后台服务模块则进一步判断本地下载路径是否存在,不存在则创建相关下载路径并进入步骤s15;

s114.后台服务模块在本地创建文件(主要是用到randomaccessfile随机访问文件类,这是之后把各个线程下载的文件串起来的关键)设置下载长度,并向handler返回开始下载的消息;

s115.handler收到消息后,把下载任务加到数据库模块并用后台服务模块开启下载,同时通过消息通知模块发出下载开始的通知。

其中,所述数据库模块中设有用于记录下载数据的下载任务数据表,在所述步骤s115中,handler把下载任务加到数据库模块时具体为向数据库模块中的下载任务数据表中添加插入与本次下载任务相对应的下载数据。

具体的,如图2所示,下载时,所述数据库模块中设有用于记录各线程下载情况的线程数据表,且后台服务模块在初始线程里初始化任务下载模块时具体包含以下步骤:

s120.任务下载模块查询线程数据表内数据,判断相关线程信息是否存在;

s121.如果相关线程信息不存在,任务下载模块则计算单个线程下载长度并创建各个线程信息,再向线程数据表插入创建的各个线程信息;

如果相关线程信息存在,任务下载模块则通过线程池启动多个下载线程进行文件下载;

s123.启动定时任务,任务下载模块每n秒向消息通知模块发送包含下载更新数据的消息,并通过消息通知模块更新下载进度,其中,所述下载更新数据包括下载进度及下载速率。

其中,线程下载模块开启多线程进行文件下载时,还包含以下步骤:

s21.线程下载模块开启多线程进行文件下载后设置云端url上资源下载范围,并设置本地文件写入位置;

s22.线程下载模块开始下载,读取下载数据并写入本地文件;

s23.若用户暂停当前下载任务,则停止下载,更新线程数据表内数据,通过消息通知模块发送下载暂停的消息;

s24.若当前下载任务失败,则将线程数据表内的对应数据条的下载进度及下载速率清空,并通过消息通知模块发送下载失败的消息;

s25.若当前下载任务完成,则检查本下载任务的所有下载线程是否都完成,如果是,删除线程数据表对应数据,更新下载任务数据表对应数据,通过消息通知模块发送下载完成的消息。

因此,在本发明的多线程断点续传下载方法在对下载任务状态改变的操作时必须调用后台服务模块传入特定的参数,且用户在需要更新ui的activity、fragment等注册特定广播,从而接收到不同的广播消息,每个广播消息能收到特定数据,同时,在调用服务时可传入多种参数达到自定义效果,且在调用服务后安卓本地存储内生成特定数据表保存线程下载进度。

且在本发明的多线程断点续传下载方法中可将下载流程抽象成一个下载模块,避免开发中的重复代码,开发者更专注业务模块的开发,缩小开发成本。

同时,还可将一个下载文件分为多块给多个线程同时下载,并在下载完成时将多个碎片连接为一个下载文件。且在本发明的多线程断点续传下载方法中还将线程下载进度实时保存进数据库,下载被中断或暂停后再次启动下载时,会根据保存的进度继续下载,从而实现了断点续传的功能。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1