lingochamp / okdownload

A Reliable, Flexible, Fast and Powerful download engine.
Apache License 2.0
5.16k stars 772 forks source link

为什么在收到taskEnd 回调之后还是会收到progress 回调? #125

Open SunJenry opened 6 years ago

SunJenry commented 6 years ago

OkDownload Version

v1.0.3

Problem Describe

通过监听下载事件调整UI,但是发现在收到taskEnd回调后任然会有progress回调,这样导致了UI显示混乱,这时什么问题?有什么解决方案吗?

Log

There is the whole log from LogCat when I occur the problem(I know we can use this tool to let log more readable):

image

Jacksgong commented 6 years ago

你确认下是否是同一个task,因为在okdownload的回调逻辑与FileDownloader中的不同,DownloadListener是直接跟着任务走的,因此没有做任何的消息转发与缓存,应该是不可能存在相关case的。

z1zong commented 6 years ago

我也遇到了这个问题,我的解决方法是: 在DownloadListener2中fetchProgress里: @Override public void fetchProgress(@NonNull DownloadTask task, int blockIndex, long increaseBytes) { super.fetchProgress(task, blockIndex, increaseBytes); if (StatusUtil.getStatus(task) == StatusUtil.Status.RUNNING) { //update your UI } } 不然在taskEnd之后,fetchProgress还是会回调两次。

Jacksgong commented 6 years ago

@z1zong 可否想办法在sample project中复现该问题,因为这个问题理论上来说是不可能出现的,因为DownloadListener没有任何的中转,所有的回调都是直接在真实事件点调用回调的。

z1zong commented 6 years ago

大概两周前刚从filedownloader升级到OKdownload的时候遇到这个问题。今天运行的时候观察了一下,这个问题没出现了。等在观察一段时间,看看是什么情况下会出现,然后再给你反馈。

Jacksgong commented 6 years ago

可以参考wiki打开日志后,进行复现后,提供完整的日志。

hurshi commented 5 years ago

@Jacksgong 我也出现这个问题了 当设置 listener.setAlwaysRecoverAssistModelIfNotSet(true); 就会出现这个问题