Ich möchte einen allgemeineren und einfacheren Ansatz für Startmethoden im Hintergrund. So sieht die Command pattern wie ein guter Kandidat aus.Android: AsyncTask mit Befehlsmuster ... Wie kann ich den Fortschritt veröffentlichen?
@Volle Stapel ex in his post with AsyncTask eine Implementierung des Befehlsmuster beschreibt.
Das Problem ist: Wie kann ich den Fortschritt in meiner Methode veröffentlichen, im Hintergrund ausgeführt, über die normale AsyncTask Progressdialog oder Callback?
Normalerweise verwenden wir publishProgress (Fortschritt) ... aber das ist nicht möglich. publishProgress ist vom Umfang "geschützt". Der direkte Aufruf von onProgressUpdate() beim Aktualisieren des Dialogs ist natürlich nicht möglich, indem die Zeile des Hintergrundprozesses und des UI-Prozesses überschritten wird.
Wie kann ich dieses oder ähnlicher Ansatz verwenden und Fortschritt veröffentlichen (über
private static interface Command {
public void execute();
}
public static final class MyWsCommand1 implements Command {
@Override
public void execute() {
// ------- TODO YOUR CODE ---------
publishProgress(90); // similar to this
}
}
private static class GenericAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
private Command command;
public GenericAsyncTask(Command command) {
super();
this.command = command;
}
@Override
protected Result doInBackground(Params... params) {
command.execute();
return null;
}
}
private GenericAsyncTask<Object, Object, Object> myAsyncTask1;
myAsyncTask1 = new GenericAsyncTask<Object, Object, Object>(new MyWsCommand1());
myAsyncTask1.execute();
* publishProgress ist vom Umfang 'protected' * das heißt s können Sie es von einer Kindklasse anrufen –
Danke. Ich tauschte das Befehlsmuster für eine GenericAsyncTask aus, die die AsyncTask erweitert. Kannst du deinen Kommentar in eine Antwort einfügen? Dann werde ich +1 und V. – tjm1706