一种基于Android的下载管理方法,步骤如下:1)首先app启动下载任务,启动下载任务的时候传递一个优先级变量传递给下载管理模块;2)下载任务首先会将任务放入到下载队列中,将高优先级的排放在队列前段优先处理;将低优先级的排放在队列尾端最后处理。排列规则如下:a)将优先级高的排列在前面;b)将普通优先级排列在高优先级后;c)将低优先级排列在普通优先级后;由优先级变量决定优先级高和优先级低的级别;当多个下载任务一起请求的时候,开启多个线程去同时处理下载任务,并且在下载任务完成后会及时进行释放多个线程;将线程最大任务数为设置5个。
【技术实现步骤摘要】
一种基于Android的下载管理方法
本专利技术涉及属于计算机程序开发
,尤其是android下载管理技术。
技术介绍
在Android的开发过程中下载部分是一个非常常用的功能,很多时候开发者都是自己简单的实现。所以存在很多缺陷,其一是功能不统一,一般不会考虑多任务下载、下载状态信息反馈通过广播而不是接口方式反馈等。因为每个设计者设计的不同和实现方式上存在差异,导致系统下载管理模块这块会出现冗余或者功能性的异常等。对于大文件或者断点续传的功能并没有加入进去,这样在下载不是很稳定的情况下会反复进行重新下载,损耗流量开销。现有技术没有对Android的下载管理设计给出较好的方法。
技术实现思路
本专利技术目的上,提出一种Android的开发过程中对android下载管理模块的设计方法,规范且不会出错。通过一个下载管理模块来进行下载任务的确定与执行。本专利技术的技术方案是,一种基于Android的下载管理方法,步骤如下:1)首先app启动下载任务,启动下载任务的时候传递一个优先级变量传递给下载管理模块;2)下载任务首先会将任务放入到下载队列中,将高优先级的排放在队列前段优先处理;将低优先级的排放在队列尾端最后处理。排列规则如下:a)将优先级高的排列在前面;b)将普通优先级排列在高优先级后;c)将低优先级排列在普通优先级后;由优先级变量决定优先级高和优先级低的级别;下载管理模块中使用线程管理器即设有线程池来管理下载线程,当多个下载任务一起请求的时候,开启多个线程去同时处理下载任务,并且在下载任务完成后会及时进行释放多个线程;线程池在使用的过程中有多种模式可以选择,常见的几种模式如下:newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程;或newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。或newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。本专利技术方案中选择带有缓存功能的线程管理器newCachedThreadPool,并且我们将线程最大任务数为设置5个,这样当下载任务过来的时候,最多可以同时执行5个下载任务,并且后续进来的任务不会开启新的线程、而直接使用之前使用过的缓存线程。如果需要下载文件的大小小于4M,则直接读写到文件中;如果大于1M,则需要先将数据读写到缓存中,然后写到文件里,同时更新下载进度,并实时的通知页面进度,直到剩余的需要下载文件的大小小于4M则直接读写到文件中。有益效果,本专利技术设计方案避免了现有技术的缺点,详细设计了一套可复用,功能齐全,支持断点续传和下载状态实时反馈等优点于一身。并能够支持超大文件下载,下载过程中不会出现OOM(内存溢出)的异常情况。经过上面综合分析本方案将具备以下性能:1、支持多任务下载;本方案中通过线程池的使用,可以同时最多开启5个任务,支持最多5个任务同时下载。2、下载进度和下载状态实时反馈;本方案中文件下载状态的进度和下载最终的结果(失败或者成功)通过接口的形式将状态实时的传递给app界面。同时app能够很方便的获取到下载的具体信息。3、下载任务具有优先级管理;本方案中使用了3种优先级,低、普通、高优先级,能够有效的对下载任务进行级别排序,能够优先响应高优先级的任务。4、支持断点续传;通过使用下载信息描述文件能够达到断点续传的功能。每次上传一部分都记录在数据库中,方便下次再次上传。5、大文件下载,将文件进行分片每次下载1M的数据并写入文件,不是全部一次性读取到内存再一次性写入文件,所以能够在下载大文件的时候有效的避免内存溢出问题的产生。与现有技术相比,其显著优点还有:本方案主要在于提供一种使用方便,支持多任务下载功能、下载信息实时回调、支持断点续传和超大文件下载等功能的设计。附图说明图1是整个功能设计总的流程图。当开启下载任务之后,从原有的任务中读取之前的下载信息,然后重新从已下载的地方再次下载,下载完成则通过接口通知成功,否则就通知失败。图2是下载流程中最重要的一部分。如果文件的大小小于1M,则直接读写到文件中,如果大于1M,则需要先将数据读写到缓存中,然后写到文件里,同时更新下载进度,并实时的通知页面进度。具体实施方式下面就描述一下具体的实现逻辑,对于更详细的部分将使用流程图进行阐述说明。图1所示:当开启下载任务之后,从原有的任务中读取之前的下载信息,然后重新从已下载的地方再次下载,下载完成则通过接口通知成功,否则就通知失败。1、首先app启动下载任务,启动下载任务的时候可以传递一个优先级变量传递给下载管理模块。2、下载任务首先会将任务放入到下载队列中,将高优先级的排放在队列前段优先处理。将低优先级的排放在队列尾端最后处理。排列规则如下:a)将优先级高的排列在前面。b)将普通优先级排列在高优先级后。c)将低优先级排列在普通优先级后。线程池的使用:因为存在多个任务共同请求下载,所以我们不能简单的设计一个单线程去处理所有的任务。为了提高执行效率,我们使用了线程池来管理线程,当多个下载任务一起请求的时候,我们会开启多个线程去同时处理,并且在处理完成后会及时进行释放。线程池在使用的过程中有多种模式可以选择,常见的几种模式如下:newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。为了提高线程的使用率且不太影响系统开销,我们选择了带有缓存功能的线程管理器newCachedThreadPool,并且我们将线程最大任务数为设置5个,这样当下载任务过来的时候,最多可以同时执行5个下载任务,并且后续进来的任务不会开启新的线程会直接使用之前使用过的缓存线程。这样处理能够大打节省系统不断开启线程的资源损耗,也降低了垃圾回收器对无用资源回收(线程的开启与回收)的计算时间。这种处理不仅提高了处理任务的效率,因为使用了缓存线程,可以重复利用缓存的线程,所以这样处理不会对系统造成过大的压力,从而达到了一个比较好的平衡效果。3、请求过程中,获取被下载文件的信息FileInfo(代指被下载文件的信息),主要获取的信息如下:a)文件下载地址b)文件的名称以及文件的类型c)文件的大小,这个是为了后期方便计算下载进度使用的文件下载地址(下载文件的url)传递进来后,你需要在下载之前,将文件的下载地址拼接好,传递进来本文档来自技高网...
【技术保护点】
1.一种基于Android的下载管理方法,其特征是,步骤如下:/n1)首先app启动下载任务,启动下载任务的时候传递一个优先级变量传递给下载管理模块;/n2)下载任务首先会将任务放入到下载队列中,将高优先级的排放在队列前段优先处理;将低优先级的排放在队列尾端最后处理。排列规则如下:/na)将优先级高的排列在前面;/nb)将普通优先级排列在高优先级后;/nc)将低优先级排列在普通优先级后;/n由优先级变量决定优先级高和优先级低的级别;/n下载管理模块中使用线程管理器即设有线程池来管理下载线程,当多个下载任务一起请求的时候,开启多个线程去同时处理下载任务,并且在下载任务完成后会及时进行释放多个线程;线程池在使用的过程中选择带有缓存功能的线程管理器newCachedThreadPool,并且将线程最大任务数为设置5个,这样当下载任务过来的时候,最多可以同时执行5个下载任务,并且后续进来的任务不会开启新的线程、而直接使用之前使用过的缓存线程。/n
【技术特征摘要】
1.一种基于Android的下载管理方法,其特征是,步骤如下:
1)首先app启动下载任务,启动下载任务的时候传递一个优先级变量传递给下载管理模块;
2)下载任务首先会将任务放入到下载队列中,将高优先级的排放在队列前段优先处理;将低优先级的排放在队列尾端最后处理。排列规则如下:
a)将优先级高的排列在前面;
b)将普通优先级排列在高优先级后;
c)将低优先级排列在普通优先级后;
由优先级变量决定优先级高和优先级低的级别;
下载管理模块中使用线程管理器即设有线程池来管理下载线程,当多个下载任务一起请求的时候,开启多个线程去同时处理下载任务,并且在下载任务完成后会及时进行释放多个线程;线程池在使用的过程中选择带有缓存功能的线程管理器newCachedThreadPool,并且将线程最大任务数为设置5个,这样当下载任务过来的时候,最多可以同时执行5个下载任务,并且后续进来的任务不会开启新的线程、而直接使用之前使用过的缓存线程。
2.根据权利要求1所述的基于Android的下载管理方法,其特...
【专利技术属性】
技术研发人员:丁凯,朱卉明,
申请(专利权)人:焦点科技股份有限公司,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。