【发布时间】:2014-05-02 08:40:18
【问题描述】:
我想在使用在活动类中扩展 AsyncTask 的私有类运行耗时方法时显示 ProgressDialog。但是应该出现在onPreExecute中的ProgressDialog在onPreExecute时没有出现。取而代之的是,在耗时的方法完成后,ProgressDialog 会立即显示并关闭。
public class ABC extends Activity {
/*somewhere in ABC
load = new Load();
load.execute(a,b,c);
int action = load.get();*/
private class Load extends AsyncTask<Object, Integer, Integer>{
private ProgressDialog progDailog;
@Override
protected Integer doInBackground(Object... param) {
Log.v("!!!!!!Load!!!!!!!!!","doInBackground");
Object a = (Object) param[0];
int b = (Integer) param[1];
int c = (Integer) param[2];
return a.doSomething(b, c);
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
progDailog.dismiss();
Log.v("!!!!!!Load!!!!!!!!!","onPostExecute");
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.v("!!!!!!Load!!!!!!!!!","onPreExecute");
progDailog = new ProgressDialog(ABC.this);
progDailog.setMessage("Loading...");
progDailog.show();
}
}
}
下面是logcat:
05-03 00:38:49.202: V/!!!!!!Load!!!!!!!!!(14666): preExecute
05-03 00:38:49.202: D/ProgressBar(14666): setProgress = 0
05-03 00:38:49.202: D/ProgressBar(14666): setProgress = 0, fromUser = false
05-03 00:38:49.202: D/ProgressBar(14666): mProgress = 0mIndeterminate = false, mMin = 0, mMax = 10000
05-03 00:38:49.232: V/!!!!!!Load!!!!!!!!!(14666): doInBackground
05-03 00:38:53.662: I/Choreographer(14666): Skipped 269 frames! The application may be doing too much work on its main thread.
05-03 00:38:53.762: D/ProgressBar(14666): updateDrawableBounds: left = 0
05-03 00:38:53.762: D/ProgressBar(14666): updateDrawableBounds: top = 0
05-03 00:38:53.762: D/ProgressBar(14666): updateDrawableBounds: right = 144
05-03 00:38:53.762: D/ProgressBar(14666): updateDrawableBounds: bottom = 144
05-03 00:38:53.772: V/!!!!!!Load!!!!!!!!!(14666): onPostExecute
【问题讨论】:
-
如果您看到进度条 onPreExecute 必须工作。你能显示日志的输出吗? doInBackgroudn 真的不做 mutch,这将很快完成。
标签: android android-asynctask progressdialog