【问题标题】:Android multi-threading download n number of resources in backgroundAndroid多线程后台下载n个资源
【发布时间】: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


【解决方案1】:

我在 3 个月前使用这个库,它非常棒的库,比如像 whatsApp 一样并行下载多个资源

不久前我也做过同样的事情,但使用的是 Pdf 文件。首先,您需要选择一个好的 Http 客户端库来执行下载,并忘记如果您自己执行此操作将遇到的所有与下载相关的问题。我推荐你使用 Ion 库,它有很多有用的功能,例如取消下载、附加回调以查看下载进度、知道下载是否成功、失败等。

其次,你显然需要一个后台运行的Service,总是可以通过制作自己的服务来做到这一点,并且android清单中的Service进程名称就像android:name =“com.company”是非常重要的。 app.services.MyService" 而不像 android:name=":MyRemoteService" 这样做,您将确保该服务将一直在后台运行(请记住,如果它是操作系统可以并且会终止该服务必要,但当资源再次可用时,服务将重新启动)。

第三,要保持更新显示这些文件的所有视图、自定义视图、活动、片段等,您需要从您的服务中触发 BroadcastReceivers。请记住,这样做您不能使用 LocalBroadcastReceiver,因为您的 Service 有自己的进程独立于您的应用程序。

1) 无需显式使用 Activity,您可以在任何您认为合适的地方注册您的广播。一个 RecyclerAdapter(最有可能)、一个 Fragment 或一个 Activity。

2) 通信 App/Service 是通过 Intent 完成的,因此您发送到 Service 和从 Service 发送的所有数据都必须是可序列化的。

3) 您可以针对不同的情况(错误、失败、成功、进度等)使用几种不同类型的广播,或者您可以只使用一种广播来通过 Bundle 发送描述这种状态的枚举从服务中触发广播时的意图

希望对你有帮助,如果有任何疑问,请告诉我。

图书馆更多信息ION

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2021-11-01
    相关资源
    最近更新 更多