我使用的線程池只有一個線程通過Android中的RecyclerView中的一個視圖持有者執行一些網絡任務(它們需要按順序執行)。 這是工作,如果我滾動緩慢。但是如果我快速滾動,太多的任務將被推送到隊列中,而我通過調試發現這些任務將完全阻塞隊列。ExecutorService如果執行了太多請求,一個線程池會阻塞隊列
我簡化了代碼(多),我現在用的是一個線程的線程池:
if (executorService == null) {
executorService = Executors.newFixedThreadPool(1);
}
executorService.execute(new Runnable() {
@Override
public void run() {
RessourceService.getCoverPage(url, callback);
while (waiting) {}
}
});
那麼,什麼是替代,如果我想沒有得到一個阻塞隊列順序執行網絡任務?
任何幫助將不勝感激。
更新: 問題是在我的代碼中的其他地方,而不是在上面張貼。正如我的問題所述,我正在通過回收者視圖的視圖執行請求。快速滾動時,圖像不會被加載。我發現問題出現在回收站視圖中的物品看不見時。原因是,由於我的「等待」變量爲真,請求被鎖定。我可以通過將其設置爲靜態並在每個請求之前將其設置爲false來解決此問題,從而在另一個查看者中停止正在進行的請求。不過,@Jessie Brian Revil關於使用newSingleThreadExecutor的建議非常有意義。不是我的問題的直接解決方案,而是上述代碼的合理解決方案(因此接受)。
謝謝!問題是我的代碼中的其他地方,但你的答案仍然有幫助。查看我的問題的編輯。 – Langkiller