我正在尝试在我的应用程序中实现一个进度条,该进度条在我AsyncTask
获取数据时显示。
为此,我尝试重建这个 SO-Answer(“SO:如何显示进度微调器”)。
AsyncTask
但是当所有工作都完成时,我的进度条会在我的末尾显示(并立即关闭) 。一年多前,“彼得”在“这里”问了一个类似的答案,但没有得到帮助。
这是我的AsyncTask
。Info:AppActivity
是我的应用程序中所有活动的父类。有些包含片段,有些不包含。有些人使用我的RESTTask
.
public class RESTTask extends AsyncTask<Void, Void, String> {
protected AppActivity AppActivity;
/*
* Special constructor to pass the activity
*/
public RESTTask(AppActivity activity) {
AppActivity = activity;
}
@Override
protected String doInBackground(Void... params) {
String resultstring = "";
// fetch data from a webservice
return resultstring;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
if (AppActivity != null) {
AppActivity.showDialog();
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (AppActivity != null) {
AppActivity.dismissDialog();
}
}
}
我的AppActivity
:
public class AppActivity extends Activity {
public ProgressDialog dialog;
@Override
protected void onResume() {
super.onResume();
dialog = new ProgressDialog(this);
}
public void showDialog() {
this.dialog.setMessage(getString(R.string.Please_wait));
this.dialog.show();
}
public void dismissDialog() {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
所以我现在的问题是:如何正确实现进度条,使其在AsyncTask
执行时显示,而不仅仅是在它之后显示?
更新信息:我希望这个例子能更清楚地说明什么不能按预期工作:
在我的一项活动中(确切地说是我的一项活动的片段之一)我想调用一个网络服务。webservice-method 需要大约十秒钟的时间来回答,因为它很复杂。所以我希望看到从调用 web 服务的那一刻到收到答案的进度条。但是我在调试时可以看到以下内容:
- 被
onPreExecute
调用并应显示对话框,但模拟器仅显示白屏 - 被
doInBackground
称为。在 Eclipse中,LogCat
我看到调用了 web 服务并处理了结果。画面静止。调用 web 服务时,模拟器仍然显示白屏。 - 被
onPostExecute
调用以关闭对话框。onPostExecute
在最终渲染屏幕的开头显示。 - 从
onPostExecute
对话框恢复后会闪烁并在此之后立即关闭。
希望这有助于理解问题。
编辑:用leak window
-exception 修复错误后更新源代码。还更新了问题,希望能更清楚。
[2]: Activity has leaked window 原来添加的“SO: Leaked window exception