2012-04-09 107 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