Я использую threadpool с одним потоком для выполнения некоторых сетевых задач (их нужно выполнять последовательно) через зрителя в RecyclerView на Android. Он работает, если я медленно прокручиваю. Но если я прокручусь быстро, слишком много задач будет перенесено в очередь, которую я обнаружил через отладку, полностью блокирует очередь.ExecutorService один поток threadpool блокирует очередь, если выполняется слишком много запросов.
я упростил код (много), где я использую одну резьбовую ThreadPool:
if (executorService == null) {
executorService = Executors.newFixedThreadPool(1);
}
executorService.execute(new Runnable() {
@Override
public void run() {
RessourceService.getCoverPage(url, callback);
while (waiting) {}
}
});
Так что альтернативы, если я хочу, чтобы выполнить сетевые задачи последовательно без получения заблокированной очереди ??
Любая помощь будет принята с благодарностью.
Обновление: Проблема была где-то еще в моем коде, а не в том, что было опубликовано выше. Как описано в моем вопросе, я выполняю запросы через посредника по просмотру. При быстрой прокрутке изображения не загружаются. Я узнал, что проблема возникла, когда предмет был вне поля зрения в recyclerview. Причиной этого было то, что запрос был заблокирован из-за того, что моя переменная «ожидание» была истинной. Я мог бы решить это, сделав его статическим и установив его в false перед каждым запросом и тем самым прекратив выполнение запроса в другом телезрителе. Тем не менее, предложение @Jessie Brian Revil об использовании newSingleThreadExecutor имеет смысл. Не прямое решение моей проблемы, а разумное решение для кода выше (поэтому принимаем).
Спасибо! Однако проблема была где-то в моем коде, но ваш ответ по-прежнему был полезен. См. Редактирование моего вопроса. – Langkiller