W mojej aplikacji robię jakieś intensywne prace w AsyncTask
sugerowane przez Android samouczki i pokazując ProgressDialog
w moim głównym mojej działalności:Aktualizacja postępu dialogowe aktywności od AsyncTask
dialog = ProgressDialog.show(MyActivity.this, "title", "text");
new MyTask().execute(request);
gdzie potem w MyTask
I post wynika z powrotem do aktywności:
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);
}
}
i na wynik delegowania, w główny ukryć okno dialogowe:
protected void postResult(Result res) {
dialog.dismiss();
// do something more here with result...
}
Tak więc wszystko działa dobrze, ale chciałbym jakoś zaktualizować okno postępu, aby pokazać użytkownikowi prawdziwy postęp zamiast zwykłego "proszę czekać ...". Czy mogę w jakiś sposób uzyskać dostęp do okna postępu od MyTask.doInBackground
, gdzie wszystkie prace są wykonane?
Jak rozumiem, działa jako oddzielny wątek, więc nie mogę "porozmawiać" z główną działalnością i dlatego używam onPostExecute
, aby przekazać wynik z powrotem do niego. Ale problem polega na tym, że onPostExecute
jest wywoływana tylko wtedy, gdy cała praca jest już wykonana i chciałbym zaktualizować postęp w dialogu w trakcie robienia czegoś.
Wszelkie wskazówki, jak to zrobić?
Uh, jakoś brakowało, że udział w docs, dzięki! – Laimoncijus