我有一種數字鍵盤和一個列表。當用戶選擇鍵盤時,我會調用一個函數來對列表進行排序。用戶可以隨時按下按鈕以顯示列表。如何將重排序工作從UI線程中移走
但是這個列表可能很大,500+,所以我在考慮不再在UI線程上進行排序。
這樣做的最好方法是什麼?
我應該使用一個普通的線程,asynctask?
我唯一擔心的是,用戶也可以點擊按鈕來顯示列表,而異步還沒有完成。我應該如何處理?
Thx
我有一種數字鍵盤和一個列表。當用戶選擇鍵盤時,我會調用一個函數來對列表進行排序。用戶可以隨時按下按鈕以顯示列表。如何將重排序工作從UI線程中移走
但是這個列表可能很大,500+,所以我在考慮不再在UI線程上進行排序。
這樣做的最好方法是什麼?
我應該使用一個普通的線程,asynctask?
我唯一擔心的是,用戶也可以點擊按鈕來顯示列表,而異步還沒有完成。我應該如何處理?
Thx
絕對是爲AsyncTask而設計的,它專爲UI以外的繁重工作而設計。關於你的最後一個問題,禁用make按鈕並在AsyncTask的onPostExecute()
中啓用它。乾杯。
轉到異步任務,您可以在onPreExecute
()中顯示一些進度條並在onPostExecute
()中停止它。 用戶將無法使用屏幕上的進度條來屏蔽任何內容。
當然你需要一個asynctask。在您的onCreate
方法中隱藏您的所有buttons
和textviews
。在後臺執行某些操作之前,您需要向用戶顯示加載欄或微調器,以便用戶無法單擊您創建的任何按鈕。下面是一個示例:
class LoadAllProducts extends AsyncTask<String, String, String> {
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(Academic.this);
pDialog.setMessage("Loading. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
//Do something
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
//finally show your button
}
});
}
使用此代碼之前,請確保您已聲明的pDialog。在我的程序中,我使用了微調。
AsyncTask看起來不錯,這...任務。您還可以讓某種狀態成員檢查排序任務是否正在運行,並根據它來啓動任務或在用戶按下按鈕時不執行任何操作。或者,如果有事情發生了變化,您也可以取消該任務並開始新的任務。
您可以像其他人所說的那樣使用AsyncTask,或者您可以創建一個線程並運行長時間運行的操作並相應地使用處理程序更新UI。看看這個鏈接http://www.vogella.com/articles/AndroidPerformance/article.html
使用輯陣線程在android系統[見此帖] [1],我希望它能幫助 [1]:http://stackoverflow.com/questions/5517197 /如何到創建的多線程功能於安卓 – Aha