AsyncTask实现多线程断点续传

  • 时间:
  • 浏览:3

  下载的很久 ,首先获取已下载位置,机会机会下载过,就从上次下载后的位置开始下载:

  百番周折,问题甜得一个劲 出现在上边代码239行(这里已注释)。别问我为哪几种,执 行这人 句的很久 ,系统进程就阻塞在那里了,本来doInBackground()方式一个劲 没法开始,onCancel()方式当然本来我会执行了。一并,机会使 用的是系统进程Executor,系统进程数为八个,点击归还 很久 八个系统进程都阻塞了,本来再次点击下载的很久 只执行了onPreEexcute()方式,没法空 闲的系统进程去执行doInBackground()方式。甜得巨坑无比有木有。。。

  不是本来问题处置了,本来为哪几种有的文件下载执行到is.close()的很久 系统进程会阻塞而有的后要?这还是个谜。机会哪位大神知道是哪几种意味,还望指点指点!

  以上是系统进程下载的原理,本来须要实现断点续传须要在每次暂停很久 记录每个系统进程已下载的大小,下次继续下载时从上次下载后的位置开始下载。一般 项目中后要 存数据库中,我这里为了简单起见直接存在了SharedPreferences中,已下载url和系统进程编号作为key值。

三、遇到的坑

    对于大文件而言,使用系统进程下载就会比单系统进程下载要快这人。系统进程下载相比单系统进程下载要稍微冗杂这人,本博文将删剪讲解怎样才能使用AsyncTask来实现系统进程的断点续传下载。

  以上代码亲测可用,几百M大文件也没问题。

二、删剪代码

源码下载:https://github.com/liuling07/MultiTaskAndThreadDownload

  问题描述:在使用上边代码下载http://ftp.neu.edu.cn/mirrors/eclipse/technology/epp/downloads/release/juno/SR2/eclipse-java-juno-SR2-linux-gtk-x86_64.tar.gz文 件的很久 ,别问我为哪几种暂停很久 执行AsyncTask.cancel(true)来归还 下载任务,不执行onCancel()函数,也就没法记录该系统进程 下载的位置。本来再次点击下载的很久 ,八个Task都只执行了onPreEexcute()方式,压根就不执行doInBackground()方式。而 下载这人文件没法这人 问题。

  这人 问题折腾了我多会儿,它又没法报任何异常,调试又调试都没法来。看AsyncTask的源码、上stackoverflow也没法找到意味。都看这人 网站(https://groups.google.com/forum/#!topic/android-developers/B-oBiS7npfQ)时,我还真以为是AsyncTask的另有有有另一一八个bug。

  布局文件和前面一篇博客《AsyncTask实现断点续传》布局文件是一样的,这里就不贴代码了。