我使用的线程池只有一个线程通过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