我的onStart()
事件如下所示:
protected void onStart() {
super.onStart();
ShowProgressDialog();
Function1(); //this takes a lot of time to compute
HideProgressDialog();
Function2(); //this function uses the values calculated from Function1
}
但ProgressDialog
不会显示。
PS:AsyncTask
对我的问题不是一个很好的解决方案,因为Function2需要从Function1计算的值,我真的不想链4-5 AsyncTasks
。
答案 0 :(得分:0)
在开始时编写以下代码
pDialog = new ProgressDialog(this);
pDialog.setMax(5);
pDialog.setMessage("Loading...");
pDialog.setCancelable(true);
pDialog.show();
答案 1 :(得分:0)
似乎活动不在活动堆栈之上。可以在文档中阅读: http://developer.android.com/reference/android/app/Activity.html
此外,如果您确实有处理,它可以阻止UI线程。我建议把它放在A-Sync任务中。在asynctask中,顺序仍然是从上到下,所以不需要创建乘法a-synctask。
答案 2 :(得分:0)
您需要在后台线程中运行Function1和Function2。只有OnStart()完成后,ProgressDialog才会显示。因此,您需要对耗时的代码进行处理以释放UI,否则进度对话框将无法显示。 这在Android中总是很好的做法,如果你在主线程上运行耗时的东西,操作系统会纠缠用户关于应用程序没有响应的消息。 一些伪代码:
OnStart()
{
ShowProgressDialog();
StartTimeConsumingThread();
}
然后,在耗时的帖子中:
TimeConsumingThread()
{
Function1();
Function2();
RunOnUiThread(
CloseProogressDialog();
)
}
答案 3 :(得分:0)
执行此操作以显示对话框:
private ProgressDialog inProgressDialog = new ProgressDialog(this);
inProgressDialog.setMessage("In progress...");
inProgressDialog.show();
并停止对话:
inProgressDialog.dismiss();
我认为在你的情况下你可以使用Async任务调用function2并将其作为params传递。
答案 4 :(得分:0)
我认为长时间计算最好使用AsyncTask。 你可以这样做:
private class Task extends AsyncTask<Void, Void, Void> {
ProgressDialog pd;
@Override
protected void onPreExecute() {
super.onPreExecute();
pd = new ProgressDialog(MyActivity.this);
pd.show();
}
@Override
protected Void doInBackground(Void... params) {
Function1();
runOnUiThread(new Runnable() {
@Override
public void run() {
pd.dismiss();
}
});
Function2();
return null;
}
}