Mostrar ProgressBar durante cierto tiempo en Android

Tengo que esperar unos segundos en mi aplicación de Android y quiero mostrar una barra de progreso durante este tiempo, ¿cómo puedo hacer esto?

He intentado por ejemplo este código:

public boolean WaitTask() { pDialog = ProgressDialog.show(context,null, "Lädt..",true); new Thread() { public void run() { try{ // just doing some long operation sleep(2000); } catch (Exception e) { } pDialog.dismiss(); } }.start(); return true; } 

Pero la barra de progreso se cierra inmediatamente sin esperar los dos segundos. ¿Dónde está mi problema?

La barra de progreso debe parecerse al círculo de actividades que se muestra en este sitio desde Android Developers.

ACTUALIZAR El AsyncTask

 private class WaitTime extends AsyncTask<Void, Void, Void> { @Override protected void onPreExecute() { super.onPreExecute(); mDialog.show(); } protected void onPostExecute() { mDialog.dismiss(); } @Override protected void onCancelled() { mDialog.dismiss(); super.onCancelled(); } @Override protected Void doInBackground(Void... params) { long delayInMillis = 2000; Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { mDialog.dismiss(); } }, delayInMillis); return null; } } 

Lo llamo así:

  mDialog = new ProgressDialog(CreateProject.this); mDialog = ProgressDialog.show(context,null, "Lädt..",true); WaitTime wait = new WaitTime(); wait.execute(); 

Te recomiendo que uses AsyncTask, entonces puedes hacer algo como esto:

  AsyncTask<Void, Void, Void> updateTask = new AsyncTask<Void, Void, Void>(){ ProgressDialog dialog = new ProgressDialog(MyActivity.this); @Override protected void onPreExecute() { // what to do before background task dialog.setTitle("Loading..."); dialog.setMessage("Please wait."); dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.show(); } @Override protected Void doInBackground(Void... params) { // do your background operation here return null; } @Override protected void onPostExecute(Void result) { // what to do when background task is completed dialog.dismiss(); }; @Override protected void onCancelled() { dialog.dismiss(); super.onCancelled(); } }; updateTask.execute((Void[])null); 

Y si quieres esperar algún tiempo específico, tal vez te gustaría usar Timer:

  final ProgressDialog dialog = new ProgressDialog(MyActivity.this); dialog.setTitle("Loading..."); dialog.setMessage("Please wait."); dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.show(); long delayInMillis = 5000; Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { dialog.dismiss(); } }, delayInMillis); 

Error: llamando pDialog.dismiss(); Debe hacerse desde el hilo de interfaz de usuario en lugar de llamados desde su nuevo hilo.

Por lo que su código debe cambiar a:

 pDialog = ProgressDialog.show(context,null, "Lädt..",true); new Thread() { public void run() { try{ // just doing some long operation Thread.sleep(2000); } catch (Exception e) { } // handle the exception somehow, or do nothing } // run code on the UI thread mYourActivityContext.runOnUiThread(new Runnable() { @Override public void run() { pDialog.dismiss(); } }); }.start(); 

En general – hay mucho mejores enfoques realizar tareas de fondo (esperar y no hacer nada durante dos segundos es también la tarea de fondo) y realizar algo en el hilo principal de la interfaz de usuario cuando terminaron. Puede utilizar la clase AsyncTask por ejemplo. Es mejor utilizar este android construido en el mecanismo, y no la creación de hilos "primitivo", aunque también funcionará – sólo si se maneja bien su aplicación y el ciclo de vida de la actividad. Recuerde que hay una posibilidad de que en los dos segundos que está esperando – el usuario puede navegar lejos de su aplicación. En ese caso, el dismiss(); Método sería llamar a un contexto destruido …

Le sugiero que lea más en – http://developer.android.com/reference/android/os/AsyncTask.html

  • android progressBar no actualiza el progreso view / drawable
  • Mostrar barra de progreso durante la descarga
  • ¿Hay una barra de progreso negra para ser visible en un fondo blanco?
  • ¿Cómo mostrar la barra de progreso en cada elemento de vista de lista?
  • ¿Por qué no está setVisibility trabajando en Android ProgressBar?
  • (ProgressBar) findViewById (R.id.ProgressBar) devuelve null
  • Android: muestra texto en el centro de la barra de progreso
  • ¿Cómo uso Android ProgressBar en modo determinado?
  • Cambiar el color de la barra de progreso en android
  • Animar la actualización de ProgressBar en Android
  • Android progressBar no se muestra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.