进度对话框打开活动

嘿家伙,我有一个进展对话框打开一个活动(例如称为活动2)的问题。 活动2有很多代码要在这个OnCreate事件中执行。

final ProgressDialog myProgressDialog = ProgressDialog.show(MyApp.this,getString(R.string.lstAppWait), getString(R.string.lstAppLoading), true); new Thread() { public void run() { runOnUiThread(new Runnable() { @Override public void run() { showApps(); } }); myProgressDialog.dismiss(); } }.start(); 

showAppsfunction启动活动2。

如果我在活动1上的button单击事件上执行此代码,我看到的进展,但她不动,我有一个黑色的屏幕在2或3秒的时间为Android显示活动的时间。

如果我在Activity2的OnCreate中执行此代码,并且如果我通过OnCreate上的代码replaceshowApps,则Activity1冻结2秒,我看不到进度对话框,并在查看结果之前再次冻结活动2上的2秒。

一个主意 ?

Solutions Collecting From Web of "进度对话框打开活动"

我有同样的问题,并使用AsyncTask正在为我工​​作。

在AsyncTask中有三个重要的方法可以覆盖。

  1. doInBackground :这是你的后台处理的肉会发生的地方。
  2. onPreExecute :在这里显示你的ProgressDialog(showDialog)
  3. onPostExecute :在这里隐藏ProgressDialog(removeDialog或dismissDialog)

如果将AsyncTask子类作为活动的内部类,则可以在AsyncActivity中调用框架方法showDialog,dismissDialog和removeDialog。

以下是AsyncTask的一个示例实现:

 class LoginProgressTask extends AsyncTask<String, Integer, Boolean> { @Override protected Boolean doInBackground(String... params) { try { Thread.sleep(4000); // Do your real work here } catch (InterruptedException e) { e.printStackTrace(); } return Boolean.TRUE; // Return your real result here } @Override protected void onPreExecute() { showDialog(AUTHORIZING_DIALOG); } @Override protected void onPostExecute(Boolean result) { // result is the value returned from doInBackground removeDialog(AUTHORIZING_DIALOG); Intent i = new Intent(HelloAndroid.this, LandingActivity.class); startActivity(i); } } 

GeeXor

我build议你避免在Activity 2的OnCreate中执行大量的操作。在OnCreate中写入很多操作是活动之间黑屏的原因。所以,使用AsyncTask或Thread来asynchronous执行这些操作(或者在onStart中写入它们是不可避免的)。

另一个build议是在activity 2的onCreate中启动另一个progressDialog,它将一直运行,直到所有的数据都被加载,用户将会知道在后台发生了什么。

AFAIK你不能预先加载显示进度对话框的任何活动。 您是在真实的设备上还是在模拟器上testing?

我已经看到了解决方法,用一个ViewFlipper打开一个活动,在中心有一个进度animation,在下一个View中,它被加载了一个活动,但是这不是推荐的,很难实现,只要你愿意。

这是我会做的。 在ui线程上创build一个处理程序,启动后台处理线程,然后显示进度对话框。 当后台线程完成工作后,通过处理程序在ui线程上发布一个可运行的函数来closures对话框。