Android多线程下载在后台的n个资源

问题描述:

我正在开发一个android应用程序,最初它下载所有的应用程序资源表单服务器,并保存在数据文件夹,其中下载发生在后台。当用户在包含gridview的片段之间导航时,下载的资源将显示在网格项目(imageview)中,否则显示加载循环,指示资源处于下载状态。Android多线程下载在后台的n个资源

下面是我设计下载管理器的方法。

使用ThreadPoolExecuter以默认大小创建4个线程和PriorityBlockingQueue。每个线程都有一个大小为5的队列。这里,轮循函数将检查每个线程队列,并将任务添加到具有空闲队列空间的线程。

有人可以通过给出指针,样例伪代码来帮助我达到上述要求。

我实现了上面的场景,但我奋力的区域,其中“每个线程都有大小5.这轮循功能的队列会检查每个线程队列,并增加了任务,其中有免费的队列中的空间线程”

我一直在想2天如何实现线程与自己的队列,需要由循环赛方法由PriorityBlockingQueue填充。

+0

我真的不知道你为什么做这种方式。您的吞吐量限制不在处理中(您未提及处理文件)其带宽。通过一次下载多件事情,你可以在多次传输之间传播你的带宽。我认为这不会比单次下载一件东西的速度更快。 –

+0

在某种意义上的文件将主要是图像。更重要的是,我需要并行下载图像。 – Kruise

+0

加尼,为什么?你的限制因素将是带宽。并行下载多个东西并不会真正起到帮助作用,除非其中一台服务器的带宽太低以至于不能使管道饱和。这不太可能,特别是在移动设备上。 –

我正在使用3个月份录得这个库它像例如WhatsApp

多资源下载平行真正真棒库,我做了同样的事情之前,但用的PDF文件,而一个前。首先,您需要选择一个良好的Http客户端库来执行下载,并忘记与您自己执行此操作时所需的下载相关的所有问题。我建议你使用Ion librabry有许多有用的功能,如取消下载,附加回调以关注下载进度,知道是否下载成功,失败等。

其次,你显然需要一个服务在后台运行,总是可以通过制作自己的服务来实现这一点,并且非常重要的是,Android清单中的服务进程名称就像android:name =“com.company.app.services.MyService”,而不是像android :name =“:MyRemoteService”这样做,你将确保服务将始终在后台运行(请记住,操作系统可以并且将会终止服务,如果它是必需的,但服务将在资源将再次可用)。第三,要保持显示这些文件更新的所有视图,自定义视图,活动,片段等,您需要从您的服务中触发BroadcastReceivers。请记住,这样做不能使用LocalBroadcastReceiver,因为您的服务具有独立于您的应用程序的独立流程。

enter image description here

1)世界上没有必要明确地使用一个活动,您可以注册广播任何地方你看它适合。一个RecyclerAdapter(很可能),一个片段或一个活动。

2)通信应用程序/服务是通过Intents完成的,因此您发送到服务的所有数据必须是可序列化的。

3)您可以使用几种不同类型的广播,每种广播都适用于不同的情况(错误,失败,成功,进度等)。)或者你可以只使用一个发送一个枚举来描述这种状态通过捆绑的意图,当你从你的服务广播发射

希望这可以帮助你,如果您有任何疑问,请告诉我。

对于图书馆更多信息ION