【发布时间】:2011-06-03 06:36:26
【问题描述】:
在我的应用程序中,我正在按照 Android 教程的建议在 AsyncTask 中做一些紧张的工作,并在我的主要活动中显示 ProgressDialog:
dialog = ProgressDialog.show(MyActivity.this, "title", "text");
new MyTask().execute(request);
然后在MyTask 我将结果发布回活动:
class MyTask extends AsyncTask<Request, Void, Result> {
@Override protected Result doInBackground(Request... params) {
// do some intense work here and return result
}
@Override protected void onPostExecute(Result res) {
postResult(res);
}
}
在结果发布时,在主要活动中我隐藏了对话框:
protected void postResult( Result res ) {
dialog.dismiss();
// do something more here with result...
}
所以这里一切正常,但我想以某种方式更新进度对话框,以便能够向用户显示一些真正的进度,而不是只是虚拟的“请稍候...”消息。我可以从MyTask.doInBackground 以某种方式访问进度对话框吗?所有工作都在哪里完成?
据我了解,它作为单独的线程运行,因此我无法从那里与主要活动“交谈”,这就是为什么我使用 onPostExecute 将结果推回给它的原因。但问题是 onPostExecute 仅在所有工作都已完成时才被调用,我想在做某事的过程中更新对话框的进度。
任何提示如何做到这一点?
【问题讨论】:
标签: android android-asynctask progressdialog