我们可以在AsyncTask中多次运行HttpClient吗?

时间:2012-11-04 09:05:08

标签: android android-asynctask httpclient

由于android doc,任务只能执行一次。

我试图在UI-Thread中运行HttpClient。但它只允许一次。如果我想从第一次启动时尚未运行的另一个链接获取另一个数据,我该怎么办?直到我第一次启动应用程序时获取所有数据,这需要很长时间。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以在AsyncTask中执行多项操作

protected Void doInBackground(Void param...){
    downloadURL(myFirstUrl);
    downloadURL(mySecondUrl);
}

AsyncTask只能执行一次。这意味着,如果您创建AsyncTask的实例,则只能调用execute()一次。如果要再次执行AsyncTask,请创建一个新的AsyncTask:

MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(); //Will work
myAsyncTask.execute(); //Will not work, this is the second time
myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(); //Will work, this is the first execution of a new AsyncTask.

答案 1 :(得分:2)

您正在主线程上运行网络操作。使用异步任务在后台线程中运行网络操作(在后台线程中执行您的http请求)。

在这样的异步任务中进行网络连接:

class WebRequestTask extends AsyncTask{


    protected void onPreExecute() {
    //show a progress dialog to the user or something
    }

    protected void doInBackground() {
        //Do your networking here
    }

    protected void onPostExecute() {
        //do something with your 
       // response and dismiss the progress dialog
    }
  }

  new WebRequestTask().execute();

如果您不知道如何使用异步任务,以下是一些教程:

http://mobileorchard.com/android-app-developmentthreading-part-2-async-tasks/

http://www.vogella.com/articles/AndroidPerformance/article.html

以下是Google的官方文档:

https://developer.android.com/reference/android/os/AsyncTask.html

您可以在需要时多次调用异步任务来执行下载任务。您可以将参数传递给异步任务,以便指定应下载的数据(例如,每次将不同的URL作为参数传递给异步任务)。通过这种方式,使用模块化方法,您可以使用不同的参数多次调用相同的aync任务来下载数据。 UI线程不会被阻止,因此用户体验不会受到阻碍,您的代码也将是线程安全的。