Angenommen, ich habe einige komplexe Ketten von Single
, Maybe
und Observable
Objekte, die einige Aufgaben ausführen.Wie kann ich die Ausführung von RxJava-Diagrammen visualisieren?
Zum Beispiel:
// Download, unzip and parse a release
public static Single<Release> fetchRelease(final Release release) {
final Path cachePath = getCachePath(release);
return download(release.url, cachePath, true).ignoreElements()
.andThen(hash(cachePath))
.flatMap(fileHash -> unzip(cachePath)
.andThen(parseFile(unzipTargetPath)));
}
Diese Ketten könnten über mehrere Threads ausgeführt werden.
Das Problem ist, dass ich den Fortschritt dieser Aufgaben an den Benutzer rendern möchten, ohne ihre Logik wo möglich matschig.
Zum Beispiel könnte die obige Aufgabe zeigen:
+-Fetching release 1.0... Done
+-Downloading https://www.example.com/v1.0.0.zip 100%
+-Hashing Library/Caches/Example/v1.0.0.zip... Done
+-Unpacking Library/Caches/Example/v1.0.0.zip
+-src.. Done
+-tests... Done
+-resources... Done
+-Parsing release... Done
Idealerweise würde ich auch die Hierarchie von Aufgaben angezeigt werden mag. Dies wird derzeit nur im Java-Aufrufdiagramm codiert.
Mein aktueller Denken ist:
- ändern jeder
Single
zu einemObservable
, wo das letzte Element ist das Ergebnis und die anderen sind Fortschritte Updates. - Schreiben Sie Ereignisklassen für jede Phase der Aufgabe.
Ich denke, das wird den Code weniger lesbar machen und zu vielen Boiler-Plate führen.
public final class DownloadProgress {
public final float progress;
// etc..
}
// etc...
public final class FetchReleaseProgress {
public final Variant<DownloadProgress, HashingProgress, UnpackProgress, ParseProgress> progress;
// etc...
}
Was ist der empfohlene Ansatz?
können Sie in Htrace – raam86
mit dem RxJavaPlugin suchen –