由于android doc,任务只能执行一次。
我试图在UI-Thread中运行HttpClient。但它只允许一次。如果我想从第一次启动时尚未运行的另一个链接获取另一个数据,我该怎么办?直到我第一次启动应用程序时获取所有数据,这需要很长时间。有谁知道如何解决这个问题?
答案 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线程不会被阻止,因此用户体验不会受到阻碍,您的代码也将是线程安全的。