我必須同時在api中發送四個不同的請求。我是否需要爲每個請求創建AsyncTask後臺線程,或者是否可以通過一個AsyncTask完成所有請求。有人可以請幫忙嗎?同時發出多個請求的最佳做法
回答
這是一個併發問題。在Android中有幾十種方法可以做到這一點。我已經寫過幾乎所有的課程,涵蓋了這些材料......即使這樣,它也不是「簡單」的。
我個人使用哈默(處理程序,信息,可運行)的Android框架。創建4個runnables並讓他們將結果發佈到Handler。
但是...這不是最容易實現的。並需要您瞭解如何安全地(正確利用了WeakReference的,等等)創建自己的自定義處理
因此,我建議在ExecutorService的
myTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
默認運行的AsyncTask(S)線程池執行器應該從4個線程開始(我相信不用查看它)。
我同意使用ThreadPoolExecutor。我已經將它用於我最近的一個項目。它可以在幾秒鐘內完成你真正獨立的任務,只要沒有像conn.getResponseCode()這樣的阻塞調用。 – RaViMete
我假設你正在使用HttpURLConnections。不幸的是,這些連接中的每一個,如the documentation中所述,都只能處理單個請求。
但是,您可以(並且可能應該)仍然執行單一的AsyncTask所有請求。 每個AsyncTask都需要創建一個需要大量時間和資源的新線程。因此,不要聽任何告訴你爲每個請求創建新任務的人。
您也可以選擇利用HTTP持久性。如果您通過connection.setRequestProperty("Connection", "Keep-Alive");
將標題Connection: Keep-Alive
添加到您的請求中,您將能夠通過同一連接發送多個請求,並節省大量時間和資源。
這是在Java中有點複雜,因爲一個請求每HttpURLConnection的規則,但它可以做到的。首先,當您完成第一個請求的HttpURLConnection 時,請不要關閉該連接。然後,要創建下一個連接,請撥打url.openConnection()
,與您用於創建第一個HttpURLConnection的URL對象相同。如果可能的話,JVM將知道重用該連接以節省帶寬。
您還可以使用HTTP/2.0複用,它可以讓你在同一時間從字面上發送多個請求的選項。不幸的是,我在HTTP/2.0中還不夠精通,告訴你如何使用這個,但是包含了多路複用功能來解決這個問題。
- 1. 多個同時發出的HTTP請求
- 2. 從無狀態bean發出HTTP請求的最佳做法
- 3. Python:同時發出多個HTTP請求
- 4. ASIHTTPRequest - 取消多個請求的最佳做法?
- 5. iOS獲取請求的最佳做法
- 6. java - 同時發送多個http請求
- 7. 同時發送多個跟蹤請求
- 8. 同時發送http請求的最佳方式
- 9. Android上的多個同時發出的HTTP請求
- 10. 請求對象的方法的最佳做法
- 11. pjax發出多個請求
- 12. 爲多個同時發出的SOAP請求配置Tomcat
- 13. 多個地圖的最佳做法
- 14. 發送多個帖子請求的最佳方式是什麼
- 15. NodeJS:如何每3秒同時發出多個HTTP請求?
- 16. Ruby庫同時發出多個HTTP請求
- 17. 在ajax請求中傳遞查詢條件的最佳做法
- 18. 最佳做法ajax,簡單的變量請求
- 19. 「隱藏」JavaScript HTTP請求的最佳做法?
- 20. 處理輔助頁面請求的最佳做法
- 21. 處理應用程序中的數據請求,最佳做法
- 22. trigger.io多個開發人員的最佳做法
- 23. 做出請求
- 24. 使用不同參數來執行多個捲曲請求的最佳做法是什麼?
- 25. 同時存儲很多用戶請求的時間戳的最佳方式
- 26. 同一個js文件發出的多個http請求
- 27. 與多個AJAX的setInterval發出請求
- 28. ReactiveCocoa 5,ReactiveSwift網絡子請求處理和最佳做法
- 29. 針對多個iDevices時資源管理的最佳做法?
- 30. 執行多個查詢時的最佳做法
針對所有人的單獨異步任務 –
您可以考慮使用像Volley這樣的networklib來爲您處理多個異步請求,而不會使您的代碼變得不復雜 – Stefan
@VivekMishra這幾乎肯定不是真的。我將查找它在Java中的工作原理並嘗試發佈答案,但HTTP(特別是HTTP/2)有許多方法來簡化進行多個請求的過程。 –