如何在单个 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的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AsyncTask 从 URL 返回单个对象

Android AsyncTask 和 SQLite 数据库实例

创建多个 AsyncTask

如果使用 Asynctask 将 URL 存储在 ArrayList 中,如何从服务器下载图像?

Android 对线程封装了:AsyncTask, HandlerThread和线程池。 有知道这三个如何选择吗?

如何从服务器下载图像如果使用Asynctask存储在ArrayList中的URL?