這裏的情景:核心 - 數據+ AFNetworking + UI更新(響應速度)
我正在寫一個DownloadManager
,允許用戶下載,暫停,取消,下載所有,並暫停所有。該DownloadManager
是一個單身人士,並使用AFNetworking
下載文件。它擁有自己的專用管理對象上下文,以便用戶可以自由使用應用程序的其他部分(通過添加,編輯,刪除)核心數據對象。我有一個核心數據實體DownloadInfo
,其存儲下載信息,即fileURL
,fileSize
,bytesRead
等。DownloadManager
更新DownloadInfo
(每個文件一個)的下載進度。
我有一個DownloadManagerViewController
它使用NSFetchedResultsController
向用戶顯示下載狀態。此下載視圖控制器正在使用主要的管理對象上下文。
現在我們假設在下載隊列中有20個文件。假設只允許3個併發下載。下載管理器應該下載文件,並顯示下載進度。
問題:
的DownloadInfo
對象正在由DownloadManager
以非常高的速率更新。 DownloadManagerViewController
(負責顯示下載進度)正在使用NSFetchedResultsControllerDelegate
方法更新列表。結果是主隊列中發生了很多事情,並且應用程序的響應能力很差。
我該如何解決這個問題?如何讓應用程序響應,同時顯示下載進度?
我不知道怎麼回事到
DownloadManager
和DownloadManagerViewController
的下載狀態通信。有沒有更好的方法來做到這一點?由於上述原因,我不想在我的
DownloadManager
中使用主管理對象上下文。請注意,DownloadManager
使用AFNetworking
異步處理請求,但最終DownloadInfo
對象在主線程中更新(作爲回調方法的結果)。也許有辦法在後臺線程中處理下載和狀態更新操作?但是如何?我將如何在主線程和後臺線程之間進行通信,即如何告訴後臺線程排隊另一個文件進行下載?
謝謝。
什麼更新信息應該實際上使它到屏幕上,什麼時候? – Wain
下載進度(即下載的y的x)以及文件名 - 基本上。文件的大小可以從幾個KB到MB不等,所以每次添加新文件時,屏幕都應該刷新,文件下載完成,文件下載開始(從隊列開始),並在每秒鐘之後更新。我可以妥協不顯示最新的下載狀態,即每3-5秒後更新一次屏幕以顯示下載進度。 – Mustafa