Ich verwende einen Threadpool mit nur einem Thread, um einige Netzwerkaufgaben (sie müssen nacheinander ausgeführt werden) durch einen Viewholder in einem RecyclerView in Android. Es funktioniert, wenn ich langsam scrolle. Aber wenn ich schnell scrollen werde, werden zu viele Aufgaben in die Warteschlange geschoben, was ich durch das Debuggen entdeckt habe, blockiert die Warteschlange vollständig.ExecutorService ein Thread Threadpool blockiert die Warteschlange, wenn zu viele Anfragen ausgeführt werden
Ich habe den Code (viel) vereinfacht, wo ich die eine bin mit Gewindethread:
if (executorService == null) {
executorService = Executors.newFixedThreadPool(1);
}
executorService.execute(new Runnable() {
@Override
public void run() {
RessourceService.getCoverPage(url, callback);
while (waiting) {}
}
});
Also, was die Alternativen ist, wenn ich ohne immer eine blockierte Warteschlange Netzwerk Aufgaben nacheinander ausgeführt werden soll ??
Jede Hilfe wird sehr geschätzt.
Update: Das Problem war woanders in meinem Code und nicht in der oben genannten. Wie in meiner Frage beschrieben, führe ich die Anfragen durch einen Viewholder einer Recyclerview aus. Beim schnellen Scrollen werden die Bilder nicht geladen. Ich stellte fest, dass das Problem auftrat, als ein Gegenstand in der Recycleransicht nicht mehr zu sehen war. Der Grund dafür war, dass die Anfrage gesperrt wurde, weil meine Variable "Warten" wahr war. Ich könnte es lösen, indem ich es vor jeder Anfrage statisch mache und es auf false setze und dadurch die laufende Anfrage in einem anderen Viewholder stoppe. Nichtsdestotrotz macht das Vorschlagen von @Jessie Brian Revil mit newSingleThreadExecutor Sinn. Keine direkte Lösung für mein Problem, aber eine vernünftige Lösung für den obigen Code (daher akzeptieren).
Vielen Dank! Das Problem war jedoch irgendwo anders in meinem Code, aber deine Antwort war immer noch hilfreich. Siehe die Bearbeitung meiner Frage. – Langkiller