1

我有一个数字键盘和一个列表。当用户选择键盘时,我调用一个函数对列表进行排序。用户可以随时按下按钮显示列表。

但是这个列表可能非常大,超过 500 个,所以我想不再在 UI 线程上进行排序。

做这个的最好方式是什么 ?

我应该使用常规线程 asynctask 吗?

我唯一担心的是用户还可以在异步任务尚未完成时单击按钮以显示列表。我应该如何处理?

谢谢

4

5 回答 5

3

绝对选择 AsyncTask,它专为 UI 之外的繁重工作而设计。关于你的最后一个问题,禁用按钮并在 AsyncTask 的onPostExecute(). 干杯。

于 2012-10-23T11:51:00.303 回答
2

绝对你需要一个异步任务。在你的onCreate方法中隐藏你所有的buttonsand 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。在我的程序中,我使用了微调器。

于 2012-10-23T11:56:29.973 回答
1

AsyncTask looks good for this... task. You can also make some sort of state-member to check whether the sort task is running and depending on it start the task or do nothing when the user presses the button. As an alternative, if something has changed, you can also cancel the task and start a new one.

于 2012-10-23T11:57:25.217 回答
0

去异步任务,你可以在 () 中显示一些进度条并在onPreExecute() 中停止它onPostExecute。在进度条在屏幕上运行之前,用户将无法单击任何内容。

于 2012-10-23T11:53:07.450 回答
0

You can use AsyncTask as other have told or you can create a thread and run long running operations and update UI accordingly with handlers. Have a look at this link http://www.vogella.com/articles/AndroidPerformance/article.html

于 2012-10-23T11:58:34.987 回答