android - Activity重建时如何重新获取文件下载进度
天蓬老师
天蓬老师 2017-04-18 09:53:27
0
3
413

做了一个下载文件的列表,用RecyclerView展示。点击下载某个文件,交由单独的下载类去处理(单例),下载类计算下载进度返回给UI进行更新。但是当用户点击返回按钮返回上一级的时候,下载线程没有停止,activity被销毁。重新进入此Activity的时候,RecylerView里的对象是通过网络新获取的,怎么设计才能让此时RecyclerView里的对象和下载类里的对象对应起来呢?否则无法实时更新进度及状态。

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回覆(3)
左手右手慢动作

這種涉及到物件銷毀重建的邏輯處理時要注意解耦,不應該去讓物件參考對應起來,而是資料值對應起來。網路處理不要直接放在Activity或RecylerView裡進行。對於下載,最好是起後台服務來管理你的下載線程,然後讓服務和Activity進行數據通信,這樣你就不用關心你的對像是否能對應上了,你只需要關心服務報告給你的下載進度值。至於Service和Activity的交互,網路上太多的教學和輪子了,我就不再囉唆了。

小葫芦

不論是系統自帶的DownloadManager还是自定义的下载组件, 一个文件下载都会有一个下载ID, 或者对应一个Uri. 值得一提的是, 系统自动的DownloadManager是透過資料庫來維持下載資訊的.

  1. 有了這個前提, 還是不夠的, 需要設法來獲取各文件的下載進度. 這個就和DownloadManager的具體實現有關了, 以系統的為例, 貌似只提供Query的接口, 因此, 我們需要創建一個後台執行緒來即時查詢下載進度.

  2. 最後就是需要考慮如何管理ID或Uri與RecyclerViewItemView之間的對應關係了.

上述 1 & 2, 完全可以參考一些主流的圖片異步加載框架(如 github: nostra13/Android-Universal-Image-Loader)來實現.

p.s.如果覺得太複雜可以參考github: erehmi/CountDownTask. (厚臉皮地推薦下自己的項目 [摀臉])

p.p.s.不建議直接notifyDataChanged()來刷新整個清單, 效能太低.

左手右手慢动作

這類下載任務最好還是用service

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板