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();
showApps函数启动活动2。
如果我在活动1上的按钮点击事件上执行此代码,我会看到进度,但是她没有移动并且在2或3秒内有一个黑屏,以便android显示活动。< / p>
如果我在Activity2的OnCreate中执行此代码并且如果我用OnCreate上的代码替换showApps,则Activity1冻结2秒,我没有看到进度对话框,并且在看到活动2之前再次冻结2秒结果
一个想法?
答案 0 :(得分:10)
我遇到了同样的问题,使用AsyncTask对我有用。
在AsyncTask中有三种重要的方法可以覆盖。
如果将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);
}
}
答案 1 :(得分:3)
GeeXor
我建议你避免在Activity 2的OnCreate中执行大量操作。写OnCreate中的大量操作是活动之间黑屏的原因。所以使用AsyncTask或在线程中异步执行这些操作(或者如果它们是不可避免的,请在 onStart 中写下来。)
另一个建议是在活动2的onCreate中启动另一个progressDialog,它将一直运行,直到你的所有数据都被加载为止。用户将知道背景中正在发生的事情。
答案 2 :(得分:2)
AFAIK您无法在显示进度对话框的情况下预加载任何活动。您是在真实设备上还是在模拟器中进行测试?
我见过使用ViewFlipper打开一个活动的变通方法,在中心有一个进度动画,在下一个View中,它被加载了一个活动,但它不是推荐的东西,很难实现按你的意愿工作
答案 3 :(得分:0)
这就是我要做的。在ui线程上创建一个处理程序,启动后台处理线程,然后显示progressdialog。当后台线程完成它的工作时,让它通过处理程序在ui线程上发布runnable以关闭对话框。