2012-04-09 142 views
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(); 
} 

回答

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]); 
    } 
} 
+1

鏈接已損壞。 – Kedar 2016-04-28 18:57:58

+0

@Kedar那不是我的錯。 – 2016-04-29 06:31:22

0

改爲使用AsyncTask。鏈接中的示例代碼提供了有關如何執行此操作的良好介紹。實質上,您在doInBackground()中執行該任務,使用onProgressUpdate()發佈您的進度並在onPostExecute()中啓動您的活動。

+0

但這裏的問題是我試圖只顯示進度條點擊一個按鈕我想顯示進度條,但它顯示2-3秒後我顯示了一個虛擬的進度條它沒有做任何動作,即使它是延遲。 – thej 2012-04-09 12:07:13