如何在单个 AsyncTask 中访问多个 URL
Posted
技术标签:
【中文标题】如何在单个 AsyncTask 中访问多个 URL【英文标题】:How to access multiple URLs in a single AsyncTask 【发布时间】:2019-02-04 20:31:04 【问题描述】:我是 android 编程的新手,我想知道是否可以使用单个 AsyncTask(70 个不同的 URL)连接到多个 URL。目前,我只能通过使用 HttpURLConnection 连接到一个 URL。
class MyAsyncTaskClass extends AsyncTask<String, String, String>
private String rez;
@Override
protected void onPreExecute()
super.onPreExecute();
@Override
protected String doInBackground(String... f_url)
try
////////....
URL url = new URL(("url"));
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
/////////////////
catch (Exception e)
rez = "false";
return rez;
@Override
protected void onPostExecute(String rez)
【问题讨论】:
你可以通过使用线程池执行器来做到这一点。编写线程池执行程序并将 asynctask 实例传递给它。它将并行执行它们。 线程池执行器似乎有一个限制,因为我只能同时运行 6 个异步任务实例,但我需要运行 70 个实例。还有其他您可能知道的解决方案吗? 尝试增加池中的线程数 【参考方案1】:我认为您不会希望同时访问所有 70 个链接(同时连接过多会使您的连接响应不佳),但我认为您更愿意一一执行。
为什么不创建一个类似的函数:
public String connection(String url)
URL cURL = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) cURL.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
rez = ..........
return rez;
然后使用:
public List<String> doInBackground()
final ArrayList<String> cResult = new ArrayList<>();
cResult.add(connection(url1));
cResult.add(connection(url2));
cResult.add(connection(url3));
...
return cResult;
通过这种方式,您可以一个接一个地访问所有链接。
但是,您似乎错过了获取结果的部分......
【讨论】:
以上是关于如何在单个 AsyncTask 中访问多个 URL的主要内容,如果未能解决你的问题,请参考以下文章
Android AsyncTask 和 SQLite 数据库实例
如果使用 Asynctask 将 URL 存储在 ArrayList 中,如何从服务器下载图像?