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

问题描述 投票:20回答:2

在我的应用程序中,我在AsyncTask做了一些紧张的工作,如Android教程所示,并在我的主要活动中显示了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
2个回答
42
投票

AsyncTask有方法onProgressUpdate(Integer...),您可以调用每个迭代,例如,或者每次在doInBackground()期间通过调用publishProgress()完成进度。

有关更多详细信息,请参阅docs


1
投票

你可以从AsyncTask的方法onProgressUpdate(YOUR_PROGRESS)更新,可以通过调用doInBackgroundpublishProgress(YOUR_PROGRESS)方法调用,可以从AsyncTask<Int, YOUR_PROGRESS_DATA_TYPE, Long>定义YOUR_PROGRESS的数据类型

© www.soinside.com 2019 - 2024. All rights reserved.