从AsyncTask更新Activity中的进度对话框

21

我在我的应用中使用了 AsyncTask 执行一些密集型操作,这是由 Android 教程建议的,并在我的主 Activity 中显示了一个 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,而我想在执行某些操作期间更新进度对话框。

有什么提示可以做到这一点吗?

2个回答

43

AsyncTask类有一个方法onProgressUpdate(Integer...),你可以在每次迭代或在doInBackground()执行过程中通过调用publishProgress()来通知进度更新。

更多详细信息请参考文档


1

您可以在AsyncTask的方法onProgressUpdate(YOUR_PROGRESS)中进行更新,该方法可以从doInBackground方法中通过调用publishProgress(YOUR_PROGRESS)来调用。 YOUR_PROGRESS的数据类型可以从AsyncTask<Int, YOUR_PROGRESS_DATA_TYPE, Long>中定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接