2011-01-04 11 views
20

In meiner app ich in AsyncTask einige intensive Arbeit mache, wie Android-Tutorials und zeigt eine ProgressDialog in meinem Haupt meiner Tätigkeit vorgeschlagen:Fortschritt Update von AsyncTask Dialog

dialog = ProgressDialog.show(MyActivity.this, "title", "text"); 
new MyTask().execute(request); 

wo dann später in MyTask ich poste führt zurück zur Aktivität:

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); 
    } 
} 

und auf Ergebnis-Posting, in Haupttätigkeit blende ich den Dialog:

protected void postResult(Result res) { 
    dialog.dismiss(); 
    // do something more here with result... 
} 

So funktioniert hier alles gut, aber ich möchte irgendwie den Fortschrittsdialog aktualisieren, um dem Benutzer einen wirklichen Fortschritt anstatt nur der dummy "Bitte warten ..." Nachricht zu zeigen. Kann ich irgendwie auf den Fortschrittsdialog von MyTask.doInBackground zugreifen, wo alle Arbeit erledigt ist?

Wie ich verstehe, läuft es als separater Thread, also kann ich nicht mit Hauptaktivität von dort "sprechen" und deshalb verwende ich onPostExecute, um das Ergebnis zurück zu drängen. Aber das Problem ist, dass onPostExecute nur aufgerufen wird, wenn alle Arbeit bereits erledigt ist und ich den Fortschritt des Dialogs in der Mitte aktualisieren möchte.

Irgendwelche Tipps, wie das geht?

Antwort

40

AsyncTask verfügt über die Methode onProgressUpdate(Integer...), die Sie zum Beispiel oder jedes Mal, wenn ein Fortschritt während doInBackground() erreicht wird, durch Aufruf von publishProgress() aufrufen können.

zum docs für weitere Details siehe

+0

Uh, irgendwie verpasst, dass ein Teil in docs, danke! – Laimoncijus

Verwandte Themen