4

我有一个 Intent Service 可以处理一些文件的下载和解压缩。现在我正在尝试使用相同的 Intent 服务来同时下载文件,但是当我尝试启动第二次下载时,它只是将新的下载排入队列,我怎么能不将我的下载排入队列?

Intent service = new Intent(getActivity(), DownloadAndUnzipService.class);

service.putExtra("post", false);
service.putExtra("url", htmlUrlDownload);
service.putExtra("filePath", filePath);
service.putExtra("destinationPath", destinationPath);
service.putExtra("receiver", mReceiver);
service.putExtra("typeDownload", Constants.HTML);
service.putExtra("metaDado", downloadContent.getMetaDado());
service.putExtra("isResuming", false);

getActivity().startService(service);

我没有放 DownloadAndUnzipService 代码,因为它太长了,我认为它没有帮助,但如果有帮助,我可以更新它。

4

2 回答 2

11

IntentService专门设计用于将多个呼叫排队,并一次运行一个。

即它 100% 正确工作,但不幸的是你的设计是错误的。

您应该研究类似的东西ThreadPoolExecutor,它可以让您Runnables从线程池中同时运行多个。在此处查看 Android 文档

您还将看到一些很好的示例代码。否则,我知道 Mark Murphy 的电子书有一些很棒的并行下载代码。

我不确定您是否需要将其放入实际中Service,或者是否可以将其保留在其中一个中Activities-这取决于您的确切目标。

于 2013-05-29T15:34:47.643 回答
2

如果 DownloadAndUnzipService 是预期行为的 IntentService 的子类。

阅读更多内容:扩展 Intent 服务

如果您想并行下载,则需要从 Service 类扩展并自行管理后台线程

于 2013-05-29T15:07:48.863 回答