【发布时间】:2016-08-22 13:21:46
【问题描述】:
我正在开发一个 android 应用程序,最初它从服务器下载所有应用程序资源并保存在数据文件夹中,下载发生在后台。当用户在包含 gridview 的片段之间导航时,下载的资源将显示在网格项 (imageview) 中,否则显示加载圆圈,指示资源处于下载状态。
这是我设计下载管理器的方式。
使用 ThreadPoolExecuter 创建 4 个线程和默认大小的 PriorityBlockingQueue。每个线程都有一个大小为 5 的队列。这里循环函数将检查每个线程的队列并将任务添加到具有空闲队列空间的线程。
有人可以通过提供指针来帮助我实现上述要求,示例伪代码如示例。
我实现了上述场景,但我在“每个线程都有一个大小为 5 的队列。这里循环函数将检查每个线程队列并将任务添加到具有空闲队列空间的线程”的区域中挣扎
我已经思考了 2 天,如何使用自己的队列实现线程,该队列需要由 PriorityBlockingQueue 通过循环方法填充。
【问题讨论】:
-
我不太确定你为什么要这样做。吞吐量的限制不是处理(您根本没有提到处理文件)它的带宽。通过一次下载多个内容,您可以在多个传输之间分配带宽。我认为这不会比一个线程一次下载一件东西快。
-
某种意义上的文件将主要是图像。更重要的是,我需要并行下载图像。
-
再次,为什么?您的限制因素将是带宽。并行下载多个东西并没有真正的帮助,除非其中一台服务器的带宽太低以至于它们不会使您的管道饱和。这不太可能,尤其是在移动设备上。
-
如果文件主要是图片,为什么不在你真正需要的时候懒加载图片而不是一次加载呢? Here 是一堆可以帮助你做到这一点的库。
-
@GabeSechan 我同意你关于服务器带宽限制的观点,但是如果图像大小不同怎么办,例如某些图像大小为 900KB-1.5MB,而其他图像大小为 200KB-500KB,这样尺寸就小了图像有更好的机会更快地加载,因为它们不必在一个队列中等待 5 个大尺寸图像排队,这有意义吗?
标签: java android multithreading round-robin