gpt4 book ai didi

java - 没有在for循环中调用Android AsyncTask

转载 作者:行者123 更新时间:2023-11-30 05:03:09 25 4
gpt4 key购买 nike

我在一个项目中工作,我需要从服务器中的文件夹下载文件。我这里有这段代码,可以从网上下载图像。

    public class GetImages extends AsyncTask<Object, Object, Object> {

private String requestUrl, imagename_;
private Bitmap bitmap ;
private FileOutputStream fos;

protected GetImages(String requestUrl, String _imagename_) {
this.requestUrl = requestUrl;
this.imagename_ = _imagename_ ;
}

@Override
protected Object doInBackground(Object... objects) {
try {
URL url = new URL(requestUrl+ imagename_);
URLConnection conn = url.openConnection();
bitmap = BitmapFactory.decodeStream(conn.getInputStream());

} catch (Exception ex) {
System.out.println(ex.getMessage());
}
return null;
}

@Override
protected void onPostExecute(Object o) {
if(!ImageStorage.checkifImageExists(imagename_))
{
ImageStorage.saveToSdCard(bitmap, imagename_);
}
}
}

为了下载单个图像,我像这样调用 AsyncTask:

new GetImages(getString(R.string.link), "1.jpg").execute();

而且效果很好。问题是我想下载更多图片,所以我有这样的东西:

public void AdicionarImagem_Pasta() {

for (int i : arrayID) {
new GetImages(getString(R.string.link), i + ".jpg").execute();
}
}

出于某种原因,它不会下载任何东西,甚至第一个也不会。有人知道如何解决这个问题吗?感谢您的帮助和您的宝贵时间。

最佳答案

它不起作用,因为您所有的 AsyncTasks 将进入相同的 queue 等待彼此执行。要绕过它,您可以使用 AsyncTask.THREAD_POOL_EXECUTOR 但如果您查看文档,不建议这样做:

Starting with Build.VERSION_CODES.HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution.

If you truly want parallel execution, you can invoke executeOnExecutor(java.util.concurrent.Executor, java.lang.Object[]) with THREAD_POOL_EXECUTOR.

但是与其在循环中创建如此多的 AsyncTask 实例(这可能会消耗内存并且这是非常糟糕的方法),不如重构您的代码。

将图像 urlsList 传递给 AsyncTask 并在 doInBackground< 中运行 for 循环 方法。在 doInBackground 方法中,从 urls 存储在 BitmapsList 中下载图像并传递给 onPostExecute 一旦下载完成。

在这里您可以找到工作示例: https://android--examples.blogspot.com/2017/02/android-asynctask-download-multiple.html

关于java - 没有在for循环中调用Android AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57860833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com