Funktionalität für die automatische Wiederholung nach Ausnahme

Habe ich aus dieser abstrakten Klasse automatisch wiederholen-Netzwerk Anrufe, wenn einige exception geworfen wird.

  • Ich aufpassen, um nicht erneut nach InterruptedException &
    UnknownHostException.
  • Ich wiederholen 5 mal. Nach jedem Versagen
    Ich führe eine exponentielle wieder aus, ab 300ms gehen bis zu
    1500ms.
public abstract class AutoRetry {

  private Object dataToReturn = null;
  public Object getDataToReturn() {
    return this.dataToReturn;
  }

  public AutoRetry() {

    short retry = -1;
    while (retry++ < StaticData.NETWORK_RETRY) {

      try {
        Thread.sleep(retry * StaticData.NETWORK_CALL_WAIT);
        this.dataToReturn = doWork();
        break;
      } catch (InterruptedException | UnknownHostException e) {
        e.printStackTrace();
        this.dataToReturn = null;
        return;
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  protected abstract Object doWork() throws IOException;
}

Ich benutze es wie folgt :

final Object dataAfterWork = new AutoRetry() {     
  @Override
  protected Object doWork() throws IOException {
    return; //a network call which returns something
  }
}.getDataToReturn();

So ist diese Umsetzung gut/richtig ?


BEARBEITEN

verschoben https://codereview.stackexchange.com/questions/87686

  • Ich würde Java 8 Lambda-Ausdrücke - Fragen Sie nach einem Supplier<T> und zurück T. Dies würde drastisch verringern, boilerplate.
  • Gute Idee, aber ich nicht verwenden Java8. Seine android-Anwendung. (Hinzugefügt tag)
  • Wenn Ihr code arbeitet, würde ich Ihnen raten, den Kopf über code-review hier codereview.stackexchange.com 😉
  • Mein code immer noch gilt - die anonyme Klasse. Ihre Methode ist etwas unangenehm mit der null und die Zuordnung und die break. Auch die Generika-in meinem Ansatz sind viel sauberer als Ihre Object.
  • Mein Rat ist, teilen Sie die Aufgabe aus der Ausführung; ich würde übergeben einer Runnable oder eine Benutzerdefinierte Schnittstelle zu AutoRetry; dies entkoppelt, was Sie tun, von der Politik wiederholen
  • Ich denke, Boris, die Antwort entspricht deinen Vorschlag, richtig ?
  • ja, es ist

InformationsquelleAutor Dexter | 2015-04-22
Schreibe einen Kommentar