Filedownloader: 下载状态恢复问题

Created on 17 Apr 2016  ·  3Comments  ·  Source: lingochamp/FileDownloader

模仿demo中的任务管理器,在FragmentTabhost中的一个fragment A中开启了一个下载任务,回调正常更新界面下载进度,在切换tab到fragment B之后再回来,逻辑上会重新获取A中列表数据刷新界面但不会停止下载任务,这时可以看到后台log中有一直不停下载的log(progress一直在回调),但是界面只会停留在再次回来时执行onBindViewHolder时判断任务为isDownloading时的下载进度,并不会根据progress的回调不停刷新界面,请问下可能是什么问题?

question

All 3 comments

不好意思,问题已经修复了,是我代码中的逻辑问题,因为viewpager fragment中的子fragment将task的viewholder更新了,借此问个相关问题,就是如果在app中多个页面对下载task进行管理的时候,如果使用viewholder的话,是否必须要建一个包含这些所有管理页面元素的统一的viewholder,不然在FileDownloadListener中获取到task的tag(也就是viewholder的时候)会报类型转换错误,请教作者我的理解是不是正确,还是有更好的解决方法

@AndyGu 你可以参考https://github.com/lingochamp/FileDownloader/issues/4 封装一个DownloadManager,另外,task.setTag()不用viewHolder做tag,而用id或其他唯一字段或者Model(有唯一字段)的话,就不会出现需要类型转换而报错(准确的说是不需要统一viewHolder)。

在需要监听下载状态的页面addUpdater(DownloadStatusUpdater ) (记得removeUpdater),然后你就可以在继承的接口update(BaseDownloadTask task)方法里进行更新viewHolder。

public void update(final BaseDownloadTask task) {
     int id = (int)   task.getTag;
     //............
     SampleHolder holder = (SampleHolder) recyclerView.findViewHolderForItemId(id);
     //如果使用findViewHolderForItemId方法adapter需要setHasStableIds(true)
     //另可用 findViewHolderForLayoutPosition和findViewHolderForAdapterPosition
     if (holder == null) return;

     //.........更新view
}

@AndyGu 我也是遇到像你一样的问题,单击下载,这时进度在更新,应用退出后再打开应用进度就不更新了,这时可以看到后台log中有一直不停下载的log(progress一直在回调),请问这个问题如何解决?可否留下个联系方式!

Was this page helpful?
0 / 5 - 0 ratings