在Android中显示ProgressBar一段时间

我必须待几秒钟在我的Android应用程序,我想在这段时间显示进度栏,我怎么能做到这一点?

我试着例如这个代码:

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; } 

进度条立即closures,不用等待两秒钟。 我的问题在哪里?

进度条应该看起来像Android Developers在本网站上展示的活动圈。

更新 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; } } 

我这样称呼它:

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

Solutions Collecting From Web of "在Android中显示ProgressBar一段时间"

我build议你使用AsyncTask,然后你可以这样做:

  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); 

如果你想等待一些特定的时间,也许你想使用定时器:

  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); 

错误:调用pDialog.dismiss(); 应该从UI线程完成,而不是从新线程调用。

所以你的代码应该改为:

 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(); 

一般情况下,执行后台任务(等待和不做任务的两秒钟也是后台任务)以及在完成后在主UI线程中执行某些操作的方法要好得多。 例如,您可以使用AsyncTask类。 最好使用这个android内置的机制,而不是“原始的”线程创build,尽pipe它也可以工作 – 只有当你处理好你的应用程序和活动的生命周期。 请记住,在等待的两秒钟内,用户可以远离应用程序。 在这种情况下, dismiss(); 方法将被调用在一个被破坏的上下文…

我build议你阅读更多 – http://developer.android.com/reference/android/os/AsyncTask.html