2011-11-07 16 views
0

我在我的主要活動如下:ProgressDialog對UI線程的時間太長出現

private void attemptLogin() { 
    this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      dialog = ProgressDialog.show(cntxt, "", "Loading...", true); 
     } 
    }); 
    // continue... 
} 

但是對話沒有出現,無論是設備或模擬器上,很長一段時間,直到後我的登錄過程已完成(無論如何它都會被解僱)。

這是爲什麼,我該如何解決?

+0

告訴我們您的代碼:

private class BackgroundLogin extends AsyncTask<String, Void , InputStream> { @Override protected void onPreExecute() { showDialog(PROGRESS_DIALOG); //SHOW PROGRESS DIALOG } @Override protected InputStream doInBackground(String... urls) { //Take Data from server or //whatever your background work while progress dialog is spinning } @Override protected void onPostExecute(InputStream responseStream) { removeDialog(PROGRESS_DIALOG); //REMOVE IT (dont cancel it) } 

您可以通過創建類似這樣的添加/顯示進度對話框? –

+0

似乎你在大的過程之後調用這個方法。你可以發佈你的代碼(更多)。 –

回答

2

只是爲了讓你知道runOnUIThread()的工作原理是,

當你的活動已完成使默認UIThread它,然後runOnUIThread()將在其啓動。所以如果您在活動中運行某些內容,則不會顯示。

我建議你使用AsyncTasks ..因爲你還沒有發佈任何代碼,我所有的建議都是基於你在你的活動中運行某些東西的假設。

2

您可以使用異步任務是這樣的:

ProgressDialog dialog = new ProgressDialog(this); 
      dialog.setTitle(""); 
      dialog.setMessage("Please wait..."); 
      dialog.setIndeterminate(true); //Imp line 
      dialog.setCancelable(false); 
      return dialog;