Single
、Maybe
およびObservable
のいくつかの作業を実行するオブジェクトの複雑なチェーンがあるとします。例えばRxJavaグラフの実行をどのように視覚化できますか?
:
// 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)));
}
これらの鎖は、複数のスレッド間で実行される可能性があります。
問題は、可能であれば論理を泥まませることなく、これらのタスクの進行をユーザーに表示したいということです。
例えば、上記のタスクが表示されることがあります:
+-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
理想的には、私は、タスクの階層構造を表示したいと思います。これは、現在のところJavaコールグラフでのみエンコードされています。
私の現在の考え方は次のとおりです。
- 変更最後の要素は結果であり、他は進行状況の更新です
Observable
にすべてのSingle
。 - タスクの各ステージのイベントクラスを記述します。
これは、コードを読みにくくして多くのボイラープレートにつながると思います。
public final class DownloadProgress {
public final float progress;
// etc..
}
// etc...
public final class FetchReleaseProgress {
public final Variant<DownloadProgress, HashingProgress, UnpackProgress, ParseProgress> progress;
// etc...
}
推奨されるアプローチは何ですか?
あなたはhtraceを見ることができます – raam86
RxJavaPlugin –