您的位置:首页 > 移动开发 > Android开发

Android多任务断点下载

2015-07-02 15:34 363 查看
项目中有一个多任务下载模块,使用的是第三方的一个下载模块Afinal框架,感觉也不是很好用,所以呢,就自己打算自己写一个,写了才发现,为什么到目前为止还没有一个很好用的下载SDK,说多了都是泪……………………..

先上两张效果图。。。。





这里下载是使用HttpURLConnection这个工具类来完成的,在下载文件方面HttpURLConnection要比HttpClicent好些,快速些。

这里的原理非常简单,多个任务的开多个线程去获取数据,使用流写入本地,并且记录每次写的数据长度,以便下次进来进行下载恢复。

项目中所涉及到的一些类有:DownBase,DownLinsener,DownloadConfig,DownloadManager,DownloadThread,MutilDownFile,DownloadInfo。




DownBase:基类,DownloadManager和MutilDownFile都继承与该基类。

DownLinsener:下载监听类,包括成功,失败,下载进度,下载最大值,下载速率。

DownloadConfig:下载配置类,自动下载的最大线程数,和下载文件存放地址。

DownloadManager:下载管理器。

DownloadThread:下载器。

MutilDownFile:下载管理类。

DownloadInfo:下载信息实体。

[b]DownBase基类[/b]




该类主要负责一些全局的数据储存,方便Downmanager和MutilDownFile数据分享。

[b]DownLinsener监听类[/b]




该类负责监听下载状态,数据传递。

[b]DownloadConfig配置类[/b]




这里配置自动下载的最大任务数,和下载保存的地址。

[b]DownloadManager下载管理类[/b]

核心代码:比较懒,直接截图记录!!!!













这个类主要是管理下载,根据任务id和任务下载地址初始化一个下载的Downloadinfo,并且传入下载监听Downlinsener。

在download中,

1,根据下载地址判断,该下载文件是否存在,存在的话拿到该文件的大小Filesize和文件名称;

2,判断数据库中是否已经下载过来该下载文件;不存在添加一个记录,否则读取已经下载的数据量长度ecistlenght;

3,在本地指定的文件夹中使用RandomAccessFile创建一个大小Filesize和服务器一样大小的文件;

4,然后根据线程数和文件大小计算出每条线程下载的数量(其实这里没有必要了,因为每个人物只有一个下载线程,这里如果开多个线程“暂停”和“开始”以及“速率”计算有点困难暂时不考虑)。

5,在handler中开启下载器。

这里开了一个线程来开启下载器,不然点击下载按钮会卡一段时间,但是这里如果使用线程来开启下载器的话需要使用Handler来处理一下,否则下载器中的监听服务正常使用。

[b]MutilDownFile下载管理类1[/b]

—————已经懒到不可救药了—————————–










该类主要初始化数据管理器,管理添加下载任务,和下载等待任务,提供查询当前存在的下载记录和删除下载记录。

[b]DownloadThread下载器类[/b]
















这个是下载器的核心代码,这代码是比较多一点,直接放出代码,可能比较乱,所以,又找到一个理由来截图了。

这个下载的方法是在这个Run中执行的,该类是一个Thread。

注意,这里有一个定时器,用于下载速度计算,这里计算的速度不是当前手机的网速,而是下载的平均速度,也就是= 下载量/下载时间。

还有,下载完成需要把数据库中的数据删除,并且把正在下载的列队中移除该任务,去等待下载任务中取一个任务来自动下载。

^^^^^^^^^^^^^^^我是符号,快乐的符号^^^^^^^^^^^^^^

上面是下载的核心代码,接下载主要就是操作界面了,这个也比较DT。这里下载列表选择Listview进行显示。所以呢,,,截图吧。。。××




好了,接下来看适配器里面把,开启下载也是在里面完成的…….截图……










其实开启下载就只有那么两句代码,,,,,,,

这里需要注意,从下载器中传来的下载状态需要使用Handler消息机制来和UI呼叫,否则报错。

……

……

……

我是省略号……

……

……

……

项目中的断点只不过是把每次下载的状态实时保存到数据库,下载完成就删除该记录。。。。。

其实这里还有涉及到了Application,里面有两个Map,分别存放正在下载的任务和等待下载的任务,代码就不贴了,不然又截图了。。。。

这个地方DT的地方就是下载器的数据和UI互交,这里设计一个框架感觉有点困难,所以好多sdk只管下载,不管你的互交方便性。

总之,下载功能需要根据项目实际情况来定…………….

http://download.csdn.net/detail/leifengpeng/8862173
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: