Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

看过您的代码,非常感谢 #23

Closed
bruvir opened this issue Aug 21, 2015 · 8 comments
Closed

看过您的代码,非常感谢 #23

bruvir opened this issue Aug 21, 2015 · 8 comments

Comments

@bruvir
Copy link

bruvir commented Aug 21, 2015

在慕课网上看到您的连接过来,之后就看了代码。非常感谢,从中学习到很多内容。
这里有点小建议,个人看法。
我觉得如果DownloadManager.getInstance().init();换成是,下面的写法,可能更灵活和方法,抄Volley,相信您也看过。
DownloadManager.newManager(context);设置默认的配置
DownloadManager.newManager(context,config);自定义配置,config里装filePath,ExecutorService。
这样用户一次定义完下载目录,和自己配置线程池。要么就使用您给的默认配置。也不需要再App里初始化,在用的UI页面就行。
manager.load(file,url,callback); 这里就不要file这个参数了,每次都写挺麻烦的。

@Aspsine
Copy link
Owner

Aspsine commented Aug 24, 2015

首先,感谢你的宝贵意见。周末比较忙,没来的急回复。在零碎的时间里仔细考虑了一下你的建议。

在java命名规则中以new打头的方法,newSomeThing(),都会返回一个SomeThing的对象。比如volley的newRequestQueue(...)返回一个RequestQueue对象,Executors.newFixedThreadPool(...)返回一个ThreadPoolExecutor对象。
在MultiThreadDownload这个项目中,最好是对DownloadManager维护一个单例,以便对下载进行控制以及下载状态的回调。
而在Volley中,Volley的Request是可以自定义的,而不同的Request可能差别很大。比如如果把下载图片的Request和web api的Request公用一个RequestQueue来进行调度,可能在某些情况下会有问题。所以Volley本身对于Request没有维护一个单例,而是把这个任务交给开发者来完成,显得更加灵活。

所以我会考虑改成:
DownloadManager.init(context);
DownloadManager.init(context, config);

@mattxzhang
Copy link

点击暂停,就异常终止闪退了

@Aspsine Aspsine self-assigned this Aug 25, 2015
@Aspsine
Copy link
Owner

Aspsine commented Aug 31, 2015

@mattxzhang
可以提供一下机型么?
如果可以帮助我调试一下,告诉我具体什么错误?
当然,你直接修复pull request那就更好了。

@mattxzhang
Copy link

机型是小米2,系统5.0.2,就是下载时点击暂停就异常终止了,你的代码暂时没看,只是先看下效果

@mattxzhang
Copy link

刚又试了下,不是机型的问题,操作步骤就是频繁点击(暂停,开始),滚动,就闪退了,测试了其他手机都是如此

@Aspsine
Copy link
Owner

Aspsine commented Aug 31, 2015

@mattxzhang
你的安装包是在论坛下载的还是在github的页面上下载的?论坛下载的可能版本有点旧。我这边测试没有问题。我手头mx5 5.0.1,galaxy nexus 4.3.2, huawei c8815 miui, huawei honor 6 4.4 都没问题。

@mattxzhang
Copy link

github页面下载的demo.apk,只需要频繁点击下载-暂停,就崩溃了,很好复现

@Aspsine
Copy link
Owner

Aspsine commented Sep 1, 2015

@mattxzhang
谢谢持续反馈,我今天用同事的MX4也测试到了。问题已经定位。
奇怪的是我的几个手机都没问题。
当时在设计“取消下载”和“暂停下载”这两个功能的时候。最初是使用信号量的,但是当HttpURLConnection 处于阻塞状态,使用信号量就没办法及时暂停回调。
所以,我尝试了一种很暴力的办法直接调用disconnect()来close HttpURLConnection 所以依赖的Socket,来catch相应的Exception再配合信号量来确认状态进行回调。测试下来,在我的四个手机上以及GenyMotion的虚拟机上也没有问题,回调很及时。没想到还是出了问题。

两周内我会重构一次,到时候api可能会有所调整。
再次感谢。

我已经将此问题移到 #25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants