0

ボタンのクリック方法で以下のコードを使用してプログレスバーを作成したので。しかし、ボタンをクリックした後、プログレスバーを表示するのに2〜3秒かかります。プログレスバーを開始するためにその遅延を減らす方法。

 public void getProgressBar() {

    progressBar = new ProgressDialog(this);
    progressBar.setCancelable(true);
    progressBar.setMessage("Loading...");
    progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressBar.show();
    progressBarStatus = 0;

    new Thread(new Runnable() {
        public void run() {
            while (progressBarStatus < 100) {

                progressBarStatus = doSomeTasks();////I am loading service 
                progressBarHandler.post(new Runnable() {
                    public void run() {
                        progressBar.setProgress(progressBarStatus);
                    }
                });
            }

                if (progressBarStatus >= 100 ) {

                    progressBar.dismiss();
                    startActivity(new Intent(getApplicationContext(),
                            StatisticDisplay.class));

            }
        }
    }).start();
}
4

2 に答える 2

0

代わりにAsyncTaskを使用してください。リンクのサンプルコードは、それを行う方法についての良い紹介を提供します。基本的に、doInBackground()で作業を行い、onProgressUpdate()を使用して進捗状況を公開し、onPostExecute()でアクティビティを開始します。

于 2012-04-09T11:49:37.777 に答える
0
 public class BackgroundAsyncTask extends AsyncTask<Void, Integer, Void> {

  int myProgress;

  @Override
  protected void onPostExecute(Void result) {
   // TODO Auto-generated method stub
  }

  @Override
  protected void onPreExecute() {
   // TODO Auto-generated method stub
   myProgress = 0;
  }

  @Override
  protected Void doInBackground(Void... params) {
   // TODO Auto-generated method stub
   while(myProgress<100){
    myProgress++;
    publishProgress(myProgress);
       SystemClock.sleep(100);
   }
   return null;
  }

  @Override
  protected void onProgressUpdate(Integer... values) {
   // TODO Auto-generated method stub
   progressBar.setProgress(values[0]);
  }
}
于 2012-04-09T11:58:27.807 に答える