多任务多线程下载并不麻烦,只要思路清晰,逻辑清晰正确,是很好实现的。我最后遇到的纠结问题是数据库的操作上,我是拿数据库来存储下载信息的,所以在数据库的关闭上遇到了麻烦。上面那个版本是建立在前面N个demo的基础之上的,在这里我写下来的唯一目的就是能够以一个清晰的思路写清楚,同时让大家看明白。
运行效果图:

一、首先是数据库,
数据库五个字段:
任务的ID:_id
线程ID:thread_id
线程下载的起始位置:start_pos
这个线程下载的结束位置:end_pos
这个任务已经下载的大小:compelete_size
这个任务的下载地址:urlString
二、操作数据库的类。在实现断点续传下载的时候,我是把线程每次下载结束后的当前任务信息都保存到数据库里面一次,相当于每次一个线程下载一次,就给当前任务拍个照片,把当前信息存到数据库里面。这样一旦暂停,或者退出程序,下次再下载的时候,直接从数据库里面读数据,然后在这个数据的基础上继续下载就行。
数据库助手类DBhelper: