2017-08-07 2 views
0

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(); 
+0

* publishProgress ist vom Umfang 'protected' * das heißt s können Sie es von einer Kindklasse anrufen –

+0

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

Antwort

1

publishProgress ist der Anwendungsbereich ‚geschützt‘

Das bedeutet, dass Sie es von einem Kind Klasse aufrufen können. Auf ein geschütztes Feld oder eine geschützte Methode kann in der Klasse selbst zugegriffen werden und auf jede Klasse, die von ihr erbt Ihr ursprünglicher Plan sollte funktionieren

Verwandte Themen