aspsine / multithreaddownload Goto Github PK
View Code? Open in Web Editor NEWAndroid Multi-Thread Download library
Android Multi-Thread Download library
Hi,感谢您的辛苦付出。在onProgress方法中打log显示progress=100,但是此时没有调用onCompleted方法。看到方法中存在synchronized代码块,但是没有分析出来原因。以下是我在onProgress中的规避方法。
// 处理有的数据在progress为100时不调用onComplete方法的问题
if (progress == 100) {
if (mDownloadItem == null) {
return;
}
final Long originId = mDownloadItem.getId();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// 当前progress为100时,5秒钟后判断当前item是否还是之前的,如果是手动调用onCompleted()。
if (originId != null && mDownloadItem != null && mDownloadItem.getId().equals(originId)) {
logger.info("exception data!!! it's still in onProgress 5s,deal it manually");
try {
onCompleted();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}, 5000);
}
不知道怎么格式化代码,看着费点儿劲儿- -!
这个问题经常出现
hi. why sometimes not equal progress in onProgress with Downloadinfo?
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime: java.lang.IllegalArgumentException: byteCount < 0: -5830920
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okio.RealBufferedSource.read(RealBufferedSource.java:44)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okhttp.internal.http.HttpConnection$FixedLengthSource.read(HttpConnection.java:469)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okhttp.internal.Util.skipAll(Util.java:227)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okhttp.internal.http.HttpConnection.discard(HttpConnection.java:239)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okhttp.internal.http.HttpConnection$FixedLengthSource.close(HttpConnection.java:491)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okio.RealBufferedSource.close(RealBufferedSource.java:204)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at com.android.okio.RealBufferedSource$1.close(RealBufferedSource.java:187)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at ?.util.multithreaddownload.util.IOCloseUtils.close(IOCloseUtils.java:14)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at ?.util.multithreaddownload.core.DownloadTaskImpl.transferData(DownloadTaskImpl.java:199)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at ?.util.multithreaddownload.core.DownloadTaskImpl.executeDownload(DownloadTaskImpl.java:148)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at ?.util.multithreaddownload.core.DownloadTaskImpl.run(DownloadTaskImpl.java:96)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-01 09:59:05.386 23078-23168/? E/AndroidRuntime:at java.lang.Thread.run(Thread.java:818)
Hi,感谢您的辛苦付出。在onProgress方法中打log显示progress=100,但是此时没有调用onCompleted方法。看到方法中存在synchronized代码块,但是没有分析出来原因。以下是我在onProgress中的规避方法。
// 处理有的下载在progress为100时不调用onComplete方法的问题
if (progress == 100) {
if (mDownloadItem == null) {
return;
}
final Long originId = mDownloadItem.getId();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// 当前progress为100时,5秒钟后判断当前item是否还是之前的,如果是手动调用onCompleted()。
if (originId != null && mDownloadItem != null && mDownloadItem.getId().equals(originId)) {
logger.info("exception data!!! it's still in onProgress 5s,deal it manually");
try {
onCompleted();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}, 5000);
}
Hi
when a file is downloaded completely and you close app and open again , Fully Downloaded Files are not specifid in the download manager list, only semi downloaded files data can specified
why ThredInfo Table gets clear after file download gets finished ?
how i can handle that a file is completely downloade and on next opening app install it?
why Failed dose not like Pause for saving recently downloads ?
The log is to more
how to close the log
Can i pause download automatically on connection loss?
How can I resume my download when I pause it?
when I pause and call download function again, download start from zero again! I tried it with your file's url but problem not solved.
please help me and sorry for my weak English!
12-08 04:27:09.917 3669-3669/com.aspsine.multithreaddownload I/DownloadService: onStart()
12-08 04:27:09.917 3669-3669/com.aspsine.multithreaddownload I/DownloadService: onConnecting()
12-08 04:27:09.917 3669-3669/com.aspsine.multithreaddownload D/TEST: status=1
12-08 04:27:10.077 3669-3669/com.aspsine.multithreaddownload I/DownloadService: onConnected()
12-08 04:27:10.685 3669-3669/com.aspsine.multithreaddownload I/DownloadService: onProgress()
12-08 04:27:10.685 3669-3669/com.aspsine.multithreaddownload D/TEST: status=3
12-08 04:27:11.185 3669-3669/com.aspsine.multithreaddownload I/DownloadService: onProgress()
12-08 04:27:11.201 3669-3669/com.aspsine.multithreaddownload D/TEST: status=3
12-08 04:27:18.849 3669-3669/com.aspsine.multithreaddownload I/DownloadService: onDownloadPaused()
12-08 04:27:18.849 3669-3669/com.aspsine.multithreaddownload D/TEST: status=4
12-08 04:27:18.849 3669-3669/com.aspsine.multithreaddownload D/TEST: paused
12-08 04:27:18.849 3669-3669/com.aspsine.multithreaddownload D/TEST: paused updated
运行的是up的Demo,在Genymotion免费版上测试的,看log差不多是7秒左右。
猜想应该是硬件问题,然后在MX2上测试,情况良好,不过有时候也会,大概是2秒左右。
程序写的很棒,希望@Aspsine 能继续优化改进,谢谢。
比如我在单个页面,点击了下载操作,同时这里有进度条以及下载完成后的控件变化等。但是我希望,我点击返回后,这个是要继续下载的,只是不需要监听进度了。当前的是会继续监听,导致空指针错误
I'm trying download some image from facebook use your library. But when i download, i found some links that your library can't download. It failed with DownloadException. Error message is "File error".
But when i download with an internet browser, i found no problem. Please check, thank you :)
dear pro,
Help me how to make when click button download in class AppDetailFragment then app will download file the same when click button in item listview, please.
Thank for share source code
任务的当前下载状态是否考虑加进去
在下载列表界面下载,然后离开该界面后台开始下载,如果再次进入下载列表界面,怎么显示当前下载的进度。 因为这个lib使用的是callback,怎么跟新到这个下载task中
downloaded videos cannot be played
How can I solve this problem?
I click on download button in activity X and use your download library, then I press back button and go to previous activity, download is continued in background. Then I go to activity X again and I want my progress bar show continued download, but it can't show it!
what can I do for this? I know that download is on progress but my progress bar can't set its progress...
please help :(
this does't worked: DownloadManager.getInstance().getDownloadProgress("test1.mp3").getProgress()
i tested lib with this files(88kb, 10mb, 110mb)
when progress argu in onProgress equal 100 on Complete excuted, it seems logical but there is a problem.
for the first file (88kb) its worked perfect
but for second and third files download finished in onComplete function when size recived to 24.7 kb.
with errorMessage: UnSupported response code:302.
And how to resolve it?
Thanks a lot!
When you download a file size of 1 GB is greater ,status in connection mode and do not start downloading and return error ,any solution for it?
return java.io.IOException: unexpected end of stream in onFailed
it through an exception with message 'length <= 0'
I tried alot to show notification while using Recycler View instead of Listview but for some reason it doesn't work... can u help me.... plz......
I need download speed limitation for each or all download tasks, and is able to set in configuration or on downloadRequest init. It is possible?
您的程序写的很漂亮~
我在使用过程中,当暂停后 重新开始下载有可能会出现标题个异常,但是这个异常状态并没有被post 到外面。会有那种情况导致的呢?
是不是我一个人是这样?
点击开始,然后暂停,报错,Demo是在主线程操作网络?这么明显的BUG不应该存在吧
FATAL EXCEPTION: main
Process: com.aspsine.multithreaddownload, PID: 8877
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
at libcore.io.IoBridge.recvfrom(IoBridge.java:506)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:489)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
at java.io.BufferedInputStream.read(BufferedInputStream.java:283)
at com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream.read(HttpTransport.java:386)
at libcore.io.Streams.skipByReading(Streams.java:158)
at java.io.InputStream.skip(InputStream.java:227)
at com.android.okhttp.internal.Util.skipAll(Util.java:249)
at com.android.okhttp.internal.http.HttpTransport.discardStream(HttpTransport.java:190)
at com.android.okhttp.internal.http.HttpTransport.access$200(HttpTransport.java:32)
at com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream.close(HttpTransport.java:408)
at com.android.okhttp.internal.Util.closeQuietly(Util.java:110)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.disconnect(HttpURLConnectionImpl.java:102)
at com.aspsine.multithreaddownload.core.AbsDownloadTask.pause(AbsDownloadTask.java:69)
at com.aspsine.multithreaddownload.core.DownloadRequest.pause(DownloadRequest.java:148)
at com.aspsine.multithreaddownload.DownloadManager.pause(DownloadManager.java:136)
at com.aspsine.multithreaddownload.demo.ui.fragment.ListViewFragment.onItemClick(ListViewFragment.java:88)
at com.aspsine.multithreaddownload.demo.ui.fragment.ListViewFragment.onItemClick(ListViewFragment.java:33)
at com.aspsine.multithreaddownload.demo.ui.adapter.ListViewAdapter$1.onClick(ListViewAdapter.java:83)
at android.view.View.performClick(View.java:4456)
at android.view.View$PerformClick.run(View.java:18490)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5094)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702)
at dalvik.system.NativeStart.main(Native Method)
08-31 21:10:45.594 8700-8700/com.aspsine.multithreaddownload E/Parcel﹕ Reading a NULL string not supported here.
08-31 21:11:52.984 8700-8700/com.aspsine.multithreaddownload E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.aspsine.multithreaddownload, PID: 8700
android.os.NetworkOnMainThreadException
at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:163)
at libcore.io.IoBridge.recvfrom(IoBridge.java:506)
at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
at java.io.BufferedInputStream.read(BufferedInputStream.java:283)
at com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream.read(HttpTransport.java:394)
at com.android.okhttp.internal.Util.skipByReading(Util.java:274)
at com.android.okhttp.internal.http.HttpTransport.discardStream(HttpTransport.java:195)
at com.android.okhttp.internal.http.HttpTransport.access$200(HttpTransport.java:32)
at com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream.close(HttpTransport.java:416)
at com.android.okhttp.internal.Util.closeQuietly(Util.java:110)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.disconnect(HttpURLConnectionImpl.java:102)
at com.aspsine.multithreaddownload.core.AbsDownloadTask.pause(AbsDownloadTask.java:69)
at com.aspsine.multithreaddownload.core.DownloadRequest.pause(DownloadRequest.java:148)
at com.aspsine.multithreaddownload.DownloadManager.pause(DownloadManager.java:136)
at com.aspsine.multithreaddownload.demo.ui.fragment.ListViewFragment.onItemClick(ListViewFragment.java:88)
at com.aspsine.multithreaddownload.demo.ui.fragment.ListViewFragment.onItemClick(ListViewFragment.java:33)
at com.aspsine.multithreaddownload.demo.ui.adapter.ListViewAdapter$1.onClick(ListViewAdapter.java:83)
at android.view.View.performClick(View.java:4635)
at android.view.View$PerformClick.run(View.java:19163)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5117)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
您这个下载框架中对于不支持range的服务器你这个也可以做到暂停和恢复,您这个是如何做到的?
实际项目中 每次掉用下载前 url都是要签名的(签名之后有时间限制)。。。小弟菜鸟实习生,不知道应该怎改源码。。。这代码确实写的太漂亮了,好生佩服
in my app, after download is completed, onCompleted is called multiple times, how to fix it???
在慕课网上看到您的连接过来,之后就看了代码。非常感谢,从中学习到很多内容。
这里有点小建议,个人看法。
我觉得如果DownloadManager.getInstance().init();换成是,下面的写法,可能更灵活和方法,抄Volley,相信您也看过。
DownloadManager.newManager(context);设置默认的配置
DownloadManager.newManager(context,config);自定义配置,config里装filePath,ExecutorService。
这样用户一次定义完下载目录,和自己配置线程池。要么就使用您给的默认配置。也不需要再App里初始化,在用的UI页面就行。
manager.load(file,url,callback); 这里就不要file这个参数了,每次都写挺麻烦的。
hi , how to remove one thread from database when file not downloading full , and adding again not downloading continuation
Hi, resume is not working properly. I'm trying to download a .obf file size of 220 mb. I paused it and after resuming, it restarting the download from the beginning.
Hi, Thank you for the great library.
I updated the library and have the following error message in my app W/System.err﹕ android.database.sqlite.SQLiteException: no such column: tag (code 1): , while compiling: select * from ThreadInfo where tag = ?
...
why close downloading after 30 minutes when application in on pause and do not save downloaded file in sotrag
when i set example max thread 10 and set thread num 5 always my file 5 thread and not change thread num for big file .
I have a download then i pause it. When i want to resume, i called DownloadManager.getInstance().download(link, callback); but it download from start. Can you tell me how can i resume a paused download?
I can download many files with your library, but for one of download urls I got protocol error!
this is my url:
http://***.ir/sources/books/files/1395/001-%20John%20Henry.mp3
error: fail audiocom.aspsine.multithreaddownload.DownloadException: Protocol error
还没开始用,不过看到下载中的参数为int型,对于文件下载,这个长度应该不够吧?
现在下载失败后,继续下载会从零开始,本地没记录当前任务的下载进度
下载后的文件已经保存到SDCard里面了,有什么办法进入下载页面的时候,就知道该任务已经完成了?我发现任务已经有了下载,我下次进的时候,状态也正确,提示已经下载的进度也正确
Is There Any Method for get speed?
文件下载完成的时候就会报下载错误,然后错误Log:com.aspsine.multithreaddownload.DownloadException: Http inputStream read error
我试过很多种方法但是都解决不了
hi ,
Thanks for your library ,i want download large files on the foreground service but sometimes downloaded files will be damaged ,please help me to resolve this error .
Tnx
I want to download the file(s) if the app is open and the user is using the app.
In the example project when I am on main activity from Listview or Recycle View the downloading are on pause.
How to download the file in the background?
反复clean 工程没有报错的情况下 传到手机上运行报错 但是直接下载demo.apk 就可以正常运行 麻烦您看下 多谢多谢!
1、出现了下载了apk后,却无法安装的问题
[2、出现了无法下载的问题。nexus对于目录的要求比较苛刻,建议将目录中的路径修改为
context.getFilesDir()
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.