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
先上两张效果图。。。。
这里下载是使用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
相关文章推荐
- Android:Layout_weight的理解
- android GPS度分秒与double之间的相互转化
- android 动画资源
- 被谷歌控制的 Android 不是好 Android?
- 在Android原生输入法LatinIME中添加自定义按键
- 【转】Android下编译jni库的二种方法(含示例)
- 【转】android4.1.2 CTS测试总结
- 【转】Android 源码下利用jni编译自己的项目(参考系统development/samples/SimpleJNI)
- 【转】Android用NDK和整套源码下编译JNI的不同
- Android开发:使用ViewDragHelper实现抽屉拉伸效果
- 详述Google针对Android平板App发布的十大开发准则
- Android 长按电源键和短按电源键的详细处理流程
- 【Android自定义控件】支持多层嵌套RadioButton的RadioGroup
- android自定义组合控件onFinishInflate和onSizeChanged的区别
- Android导入第三方静态库.a编译成动态库.so
- Android动画之图片动画
- android 实用代码
- Android动画之Interpolator和AnimationSet
- android属性动画—自己的测试代码
- android动画之一Tween动画