2016-08-22 40 views
1

我正在開發一個android應用程序,最初它下載所有的應用程序資源表單服務器,並保存在數據文件夾,其中下載發生在後臺。當用戶在包含gridview的片段之間導航時,下載的資源將顯示在網格項目(imageview)中,否則顯示加載循環,指示資源處於下載狀態。Android多線程下載在後臺的n個資源

下面是我設計下載管理器的方法。

使用ThreadPoolExecuter以默認大小創建4個線程和PriorityBlockingQueue。每個線程都有一個大小爲5的隊列。這裏,輪循函數將檢查每個線程隊列,並將任務添加到具有空閒隊列空間的線程。

有人可以通過給出指針,樣例僞代碼來幫助我達到上述要求。

我實現了上面的場景,但我奮力的區域,其中「每個線程都有大小5.這輪循功能的隊列會檢查每個線程隊列,並增加了任務,其中有免費的隊列中的空間線程」

我一直在想2天如何實現線程與自己的隊列,需要由循環賽方法由PriorityBlockingQueue填充。

+0

我真的不知道你爲什麼做這種方式。您的吞吐量限制不在處理中(您未提及處理文件)其帶寬。通過一次下載多件事情,你可以在多次傳輸之間傳播你的帶寬。我認爲這不會比單次下載一件東西的速度更快。 –

+0

在某種意義上的文件將主要是圖像。更重要的是,我需要並行下載圖像。 – Kruise

+0

加尼,爲什麼?你的限制因素將是帶寬。並行下載多個東西並不會真正起到幫助作用,除非其中一臺服務器的帶寬太低以至於不能使管道飽和。這不太可能,特別是在移動設備上。 –

回答

0

我正在使用3個月份錄得這個庫它像例如WhatsApp

多資源下載平行真正真棒庫,我做了同樣的事情之前,但用的PDF文件,而一個前。首先,您需要選擇一個良好的Http客戶端庫來執行下載,並忘記與您自己執行此操作時所需的下載相關的所有問題。我建議你使用Ion librabry有許多有用的功能,如取消下載,附加回調以關注下載進度,知道是否下載成功,失敗等。

其次,你顯然需要一個服務在後臺運行,總是可以通過製作自己的服務來實現這一點,並且非常重要的是,Android清單中的服務進程名稱就像android:name =「com.company.app.services.MyService」,而不是像android :name =「:MyRemoteService」這樣做,你將確保服務將始終在後臺運行(請記住,操作系統可以並且將會終止服務,如果它是必需的,但服務將在資源將再次可用)。第三,要保持顯示這些文件更新的所有視圖,自定義視圖,活動,片段等,您需要從您的服務中觸發BroadcastReceivers。請記住,這樣做不能使用LocalBroadcastReceiver,因爲您的服務具有獨立於您的應用程序的獨立流程。

enter image description here

1)世界上沒有必要明確地使用一個活動,您可以註冊廣播任何地方你看它適合。一個RecyclerAdapter(很可能),一個片段或一個活動。

2)通信應用程序/服務是通過Intents完成的,因此您發送到服務的所有數據必須是可序列化的。

3)您可以使用幾種不同類型的廣播,每種廣播都適用於不同的情況(錯誤,失敗,成功,進度等)。)或者你可以只使用一個發送一個枚舉來描述這種狀態通過捆綁的意圖,當你從你的服務廣播發射

希望這可以幫助你,如果您有任何疑問,請告訴我。

對於圖書館更多信息ION