由於android,該任務只能執行一次。我們可以在AsyncTask中多次運行HttpClient嗎?
我想在UI線程中運行HttpClient。但它只允許一次。如果我想從另一個尚未在第一次啓動時運行的鏈接獲取另一個數據,我該怎麼做?直到我第一次啓動應用程序時才獲取所有數據,這需要很長時間。有沒有人知道如何解決這個問題?
由於android,該任務只能執行一次。我們可以在AsyncTask中多次運行HttpClient嗎?
我想在UI線程中運行HttpClient。但它只允許一次。如果我想從另一個尚未在第一次啓動時運行的鏈接獲取另一個數據,我該怎麼做?直到我第一次啓動應用程序時才獲取所有數據,這需要很長時間。有沒有人知道如何解決這個問題?
您正在主線程上運行網絡操作。使用異步任務在後臺線程中運行網絡操作(在後臺線程中執行您的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作爲參數傳遞給異步任務)。通過這種方式,使用模塊化方法,您可以使用不同的參數多次調用同一個異步任務來下載數據。 UI線程不會被阻塞,所以用戶體驗不會受到阻礙,並且您的代碼也會線程安全。
非常感謝您的第一個鏈接。 –
您可以在的AsyncTask
protected Void doInBackground(Void param...){
downloadURL(myFirstUrl);
downloadURL(mySecondUrl);
}
一個的AsyncTask做多的操作只能執行一次。這意味着,如果您創建AsyncTask的實例,則只能調用一次。如果要再次執行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.
感謝您的評論,讓我嘗試一下。 –
這是非常低效的(每次執行新的AsyncTask時,一次又一次地初始化/構造HttpClient),更好的解決方案是綁定一個服務(只在這裏初始化/構造httpClient一次),然後調用網絡方法該服務只要您需要在您的代碼中執行網絡操作。 – yorkw