Подтвердить что ты не робот

Обновление диалога выполнения в Activity из 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...
}

Итак, все работает отлично, но я хотел бы как-то обновить диалог прогресса, чтобы показать пользователю какой-то реальный прогресс вместо просто манекена "Подождите...". Могу ли я каким-либо образом получить доступ к диалоговому прогрессу из MyTask.doInBackground, где все работает?

Как я понимаю, он работает как отдельный поток, поэтому я не могу "говорить" с основным видом деятельности, и поэтому я использую onPostExecute, чтобы вернуть результат обратно. Но проблема в том, что onPostExecute вызывается только тогда, когда все работы уже выполнены, и я хотел бы обновить ход диалога в середине чего-то.

Любые советы, как это сделать?

4b9b3361

Ответ 1

AsyncTask имеет метод onProgressUpdate(Integer...), который вы можете вызывать каждую итерацию, например, или каждый раз, когда прогресс выполняется во время doInBackground(), вызывая publishProgress().

Подробнее см. docs.