在我的应用中,我正在按照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
,并且我想在做某事的过程中更新对话框的进度。
任何提示如何做到这一点?
答案 0 :(得分:42)
AsyncTask有方法onProgressUpdate(Integer...)
,您可以通过调用doInBackground()
来调用每个迭代,例如每次在publishProgress()
期间完成进度。
有关详细信息,请参阅docs
答案 1 :(得分:0)
您可以从AsyncTask的方法onProgressUpdate(YOUR_PROGRESS)
更新,该方法可以通过调用doInBackground
从publishProgress(YOUR_PROGRESS)
方法调用
可以从AsyncTask<Int, YOUR_PROGRESS_DATA_TYPE, Long>