2012-10-23 50 views
1

我有一種數字鍵盤和一個列表。當用戶選擇鍵盤時,我會調用一個函數來對列表進行排序。用戶可以隨時按下按鈕以顯示列表。如何將重排序工作從UI線程中移走

但是這個列表可能很大,500+,所以我在考慮不再在UI線程上進行排序。

這樣做的最好方法是什麼?

我應該使用一個普通的線程,asynctask?

我唯一擔心的是,用戶也可以點擊按鈕來顯示列表,而異步還沒有完成。我應該如何處理?

Thx

+0

使用輯陣線程在android系統[見此帖] [1],我希望它能幫助 [1]:http://stackoverflow.com/questions/5517197 /如何到創建的多線程功能於安卓 – Aha

回答

3

絕對是爲AsyncTask而設計的,它專爲UI以外的繁重工作而設計。關於你的最後一個問題,禁用make按鈕並在AsyncTask的onPostExecute()中啓用它。乾杯。

0

轉到異步任務,您可以在onPreExecute()中顯示一些進度條並在onPostExecute()中停止它。 用戶將無法使用屏幕上的進度條來屏蔽任何內容。

2

當然你需要一個asynctask。在您的onCreate方法中隱藏您的所有buttonstextviews。在後臺執行某些操作之前,您需要向用戶顯示加載欄或微調器,以便用戶無法單擊您創建的任何按鈕。下面是一個示例:

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。在我的程序中,我使用了微調。

1

AsyncTask看起來不錯,這...任務。您還可以讓某種狀態成員檢查排序任務是否正在運行,並根據它來啓動任務或在用戶按下按鈕時不執行任何操作。或者,如果有事情發生了變化,您也可以取消該任務並開始新的任務。