从AsyncTask更新活动中的进度对话框

在我的应用中,我正在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...

}

因此,此处一切正常,但是我想以某种方式更新进度对话框,以便向用户显示一些实际进度,而不是仅显示虚拟的“ Please wait ...”消息。我能以某种方式从MyTask.doInBackground所有工作完成的地方访问进度对话框吗?


据我了解,它是作为单独的线程运行的,因此我无法从那里“与”主活动“交谈”,这就是为什么我onPostExecute经常将结果推回去。但是问题是onPostExecute只有在所有工作都已经完成并且在执行某项操作的过程中我想更新对话框时,才调用该方法。


任何提示如何做到这一点?


慕的地6264312
浏览 462回答 2
2回答

慕哥9229398

的AsyncTask有方法onProgressUpdate(Integer...),你可以调用每个迭代例如或者每个进程前进过程中完成时间doInBackground()致电publishProgress()。请参阅文档以获取更多详细信息

红糖糍粑

您可以从AsyncTask的方法更新,onProgressUpdate(YOUR_PROGRESS)该方法可以通过调用 YOUR_PROGRESS的数据类型从doInBackground方法调用,publishProgress(YOUR_PROGRESS)该数据类型可以从AsyncTask<Int, YOUR_PROGRESS_DATA_TYPE, Long>
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android