如果您已经开始运行单个下载,那么链接多个图像的下载有什么问题?如果您不关心精确的进度(至少这是我在这里所理解的),您可以简单地通过 for 循环来做到这一点。
伪代码:
String[] urlStack = {"http://www.myimage.com/1.jpg", "http://www.myimage.com/2.jpg", "http://www.myimage.com/3.jpg"};
for(int i = 0; i < urlStack.length; i++)
{
yourAlreadyDoneDownloadProcedure(updateProgressCallback);
}
...
下载完成后,当然会在下载过程中调用 updateProgressCallback 方法。
...
private void updateProgressFallback()
{
progressBarText += 100 / urlStack.length;
}
这只是为了展示您可以/应该如何处理这个问题。
编辑您的第一条评论:
在这种情况下,您应该使用FutureTask。
FutureTask 对象可以等待完成,没有任何while()...sleep
例如
for(int i = 0; i < urlStack.length; i++)
{
// fTask is an array of your download procedure objects
// get() will wait until the Task is done, no manual sleep commands necessary
fTask[i].get();
// since we have a concatenation of downloads, we can update progress here
progessBarText += 100 / urlStack.length;
}
编辑您的第二条评论:
您将拥有一个实现 Callable 的类,您的所有魔法都发生在这里:
public class MyCallable implements Callable<String>
{
String url;
public MyCallable(String s)
{
url = s;
}
@Override
public String call() throws Exception
{
// Download image here, you have the URL stored in `url`
return "I'm done";
}
}
你的 FutureTask 然后运行那个对象:
MyCallable img1 = new MyCallable("http://www.myimage.com/1.jpg");
MyCallable img2 = new MyCallable("http://www.myimage.com/2.jpg");
FutureTask<String> fTask = new FutureTask<String>(img1);
fTask.get();
fTask = new FutureTask<String>(img2);
fTask.get();
这是否使它更清晰?上面的代码可以优化很多,这里只是为了了解一下FutureTask需要了解的内容